private Task SendAsync <T>(T message, string queueName) where T : IRedisMessage { var db = _multiplexer.GetDatabase(_configuration.DatabaseId); var redisListItem = new RedisListItem <T>(Guid.NewGuid().ToString("N"), message); return(Task.WhenAll( UploadAttachment(redisListItem, queueName, db), db.ListLeftPushAsync(queueName, _configuration.MessageSerializer.Serialize(redisListItem)), db.PublishAsync(queueName, 0, CommandFlags.FireAndForget) )); }
private async Task UploadAttachment <T>(RedisListItem <T> message, string queueName, IDatabase db) where T : IRedisMessage { if (message.Body is ICommandWithAttachment attachmentMessage) { if (_attachmentProvider == null) { throw new AttachmentProviderMissingException(); } if (attachmentMessage.Attachment != null) { var attachmentId = Guid.NewGuid().ToString("N"); await db.HashSetAsync(RedisQueueConventions.GetMessageHashKey(queueName, message.Id), AttachmentUtility.AttachmentKey, attachmentId).ConfigureAwait(false); await _attachmentProvider.UploadAttachmentAsync(queueName, attachmentId, attachmentMessage.Attachment).ConfigureAwait(false); } } }