Example #1
0
        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)
                       ));
        }
Example #2
0
        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);
                }
            }
        }