Exemplo n.º 1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="SendMessageCommandBatchHandler" /> class.
        /// </summary>
        /// <param name="serializer">The serializer.</param>
        /// <param name="enqueue">The enqueue.</param>
        /// <param name="unixTimeFactory">The unix time factory.</param>
        /// <param name="messageIdFactory">The message identifier factory.</param>
        /// <param name="sentMessageFactory">The sent message factory.</param>
        /// <param name="redisHeaders">The redis headers.</param>
        /// <param name="sendBatchSize">Size of the send batch.</param>
        public SendMessageCommandBatchHandler(
            ICompositeSerialization serializer,
            EnqueueBatchLua enqueue,
            IUnixTimeFactory unixTimeFactory,
            IGetMessageIdFactory messageIdFactory,
            ISentMessageFactory sentMessageFactory,
            RedisHeaders redisHeaders,
            ISendBatchSize sendBatchSize)
        {
            Guard.NotNull(() => serializer, serializer);
            Guard.NotNull(() => enqueue, enqueue);
            Guard.NotNull(() => unixTimeFactory, unixTimeFactory);
            Guard.NotNull(() => messageIdFactory, messageIdFactory);
            Guard.NotNull(() => sentMessageFactory, sentMessageFactory);
            Guard.NotNull(() => redisHeaders, redisHeaders);
            Guard.NotNull(() => sendBatchSize, sendBatchSize);

            _serializer         = serializer;
            _enqueue            = enqueue;
            _messageIdFactory   = messageIdFactory;
            _sentMessageFactory = sentMessageFactory;
            _redisHeaders       = redisHeaders;
            _sendBatchSize      = sendBatchSize;
            _unixTimeFactory    = unixTimeFactory;
        }
Exemplo n.º 2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="SendMessages" /> class.
 /// </summary>
 /// <param name="sentMessageFactory">The sent message factory.</param>
 /// <param name="dataStorage">The data storage.</param>
 public SendMessages(ISentMessageFactory sentMessageFactory,
                     IDataStorage dataStorage)
 {
     Guard.NotNull(() => sentMessageFactory, sentMessageFactory);
     Guard.NotNull(() => dataStorage, dataStorage);
     _sentMessageFactory = sentMessageFactory;
     _dataStorage        = dataStorage;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="SqLiteMessageQueueSend" /> class.
 /// </summary>
 /// <param name="sentMessageFactory">The sent message factory.</param>
 /// <param name="sendMessage">The send message.</param>
 /// <param name="sendMessageAsync">The send message asynchronous.</param>
 public SqLiteMessageQueueSend(ISentMessageFactory sentMessageFactory,
     ICommandHandlerWithOutput<SendMessageCommand, long> sendMessage, 
     ICommandHandlerWithOutputAsync<SendMessageCommand, long> sendMessageAsync)
 {
     Guard.NotNull(() => sentMessageFactory, sentMessageFactory);
     Guard.NotNull(() => sendMessage, sendMessage);
     Guard.NotNull(() => sendMessageAsync, sendMessageAsync);
     _sentMessageFactory = sentMessageFactory;
     _sendMessage = sendMessage;
     _sendMessageAsync = sendMessageAsync;
 }
Exemplo n.º 4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="SendMessages" /> class.
 /// </summary>
 /// <param name="sentMessageFactory">The sent message factory.</param>
 /// <param name="sendMessage">The send message.</param>
 /// <param name="sendMessageAsync">The send message asynchronous.</param>
 public SendMessages(ISentMessageFactory sentMessageFactory,
                     ICommandHandlerWithOutput <SendMessageCommand, long> sendMessage,
                     ICommandHandlerWithOutputAsync <SendMessageCommand, long> sendMessageAsync)
 {
     Guard.NotNull(() => sentMessageFactory, sentMessageFactory);
     Guard.NotNull(() => sendMessage, sendMessage);
     Guard.NotNull(() => sendMessageAsync, sendMessageAsync);
     _sentMessageFactory = sentMessageFactory;
     _sendMessage        = sendMessage;
     _sendMessageAsync   = sendMessageAsync;
 }
Exemplo n.º 5
0
        /// <summary>
        /// Initializes a new instance of the <see cref="RedisQueueSend" /> class.
        /// </summary>
        /// <param name="sentMessageFactory">The sent message factory.</param>
        /// <param name="headers">The headers.</param>
        /// <param name="sendMessage">The send message.</param>
        /// <param name="sendMessageBatch">The send message batch.</param>
        /// <param name="sendMessageAsync">The send message asynchronous.</param>
        /// <param name="sendMessageBatchAsync">The send message batch asynchronous.</param>
        public RedisQueueSend(ISentMessageFactory sentMessageFactory,
                              RedisHeaders headers, ICommandHandlerWithOutput <SendMessageCommand, string> sendMessage, ICommandHandlerWithOutput <SendMessageCommandBatch, QueueOutputMessages> sendMessageBatch, ICommandHandlerWithOutput <SendMessageCommand, Task <string> > sendMessageAsync, ICommandHandlerWithOutput <SendMessageCommandBatch, Task <QueueOutputMessages> > sendMessageBatchAsync)
        {
            Guard.NotNull(() => sentMessageFactory, sentMessageFactory);
            Guard.NotNull(() => headers, headers);
            Guard.NotNull(() => sendMessage, sendMessage);
            Guard.NotNull(() => sendMessageBatch, sendMessageBatch);
            Guard.NotNull(() => sendMessageBatchAsync, sendMessageBatchAsync);
            Guard.NotNull(() => sentMessageFactory, sentMessageFactory);

            _headers               = headers;
            _sendMessage           = sendMessage;
            _sendMessageBatch      = sendMessageBatch;
            _sendMessageAsync      = sendMessageAsync;
            _sendMessageBatchAsync = sendMessageBatchAsync;
            _sentMessageFactory    = sentMessageFactory;
        }
Exemplo n.º 6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="RedisQueueSend" /> class.
        /// </summary>
        /// <param name="sentMessageFactory">The sent message factory.</param>
        /// <param name="headers">The headers.</param>
        /// <param name="sendMessage">The send message.</param>
        /// <param name="sendMessageBatch">The send message batch.</param>
        /// <param name="sendMessageAsync">The send message asynchronous.</param>
        /// <param name="sendMessageBatchAsync">The send message batch asynchronous.</param>
        public RedisQueueSend(ISentMessageFactory sentMessageFactory,
            RedisHeaders headers, ICommandHandlerWithOutput<SendMessageCommand, string> sendMessage, ICommandHandlerWithOutput<SendMessageCommandBatch, QueueOutputMessages> sendMessageBatch, ICommandHandlerWithOutput<SendMessageCommand, Task<string>> sendMessageAsync, ICommandHandlerWithOutput<SendMessageCommandBatch, Task<QueueOutputMessages>> sendMessageBatchAsync)
        {
            Guard.NotNull(() => sentMessageFactory, sentMessageFactory);
            Guard.NotNull(() => headers, headers);
            Guard.NotNull(() => sendMessage, sendMessage);
            Guard.NotNull(() => sendMessageBatch, sendMessageBatch);
            Guard.NotNull(() => sendMessageBatchAsync, sendMessageBatchAsync);
            Guard.NotNull(() => sentMessageFactory, sentMessageFactory);

            _headers = headers;
            _sendMessage = sendMessage;
            _sendMessageBatch = sendMessageBatch;
            _sendMessageAsync = sendMessageAsync;
            _sendMessageBatchAsync = sendMessageBatchAsync;
            _sentMessageFactory = sentMessageFactory;
        }
Exemplo n.º 7
0
        /// <summary>
        /// Processes the sent messages.
        /// </summary>
        /// <param name="result">The result.</param>
        /// <param name="messageCount">The message count.</param>
        /// <param name="sentMessageFactory">The sent message factory.</param>
        /// <returns></returns>
        /// <exception cref="DotNetWorkQueueException">$Failed to enqueue record(s). The LUA enqueue script returned the wrong count of items {result.Count}, expected {messageCount * 2}</exception>
        public static List<QueueOutputMessage> ProcessSentMessages(List<string> result, int messageCount, ISentMessageFactory sentMessageFactory)
        {
            var rc = new List<QueueOutputMessage>(messageCount);
            if (result.Count != messageCount * 2) //we get back 2 id's for each request - return count should be double
            {
                throw new DotNetWorkQueueException(
                    $"Failed to enqueue record(s). The LUA enqueue script returned the wrong count of items {result.Count}, expected {messageCount * 2}");
            }

            for (var i = 0; i < result.Count; i = i + 2) //note that we pull items as pairs
            {
                rc.Add(new QueueOutputMessage(sentMessageFactory.Create(new RedisQueueId(result[i]),
                     new RedisQueueCorrelationId(new Guid(result[i + 1])))));
            }
            return rc;
        }
        /// <summary>
        /// Processes the sent messages.
        /// </summary>
        /// <param name="result">The result.</param>
        /// <param name="messageCount">The message count.</param>
        /// <param name="sentMessageFactory">The sent message factory.</param>
        /// <returns></returns>
        /// <exception cref="DotNetWorkQueueException">$Failed to enqueue record(s). The LUA enqueue script returned the wrong count of items {result.Count}, expected {messageCount * 2}</exception>
        public static List <QueueOutputMessage> ProcessSentMessages(List <string> result, int messageCount, ISentMessageFactory sentMessageFactory)
        {
            var rc = new List <QueueOutputMessage>(messageCount);

            if (result.Count != messageCount * 2) //we get back 2 id's for each request - return count should be double
            {
                throw new DotNetWorkQueueException(
                          $"Failed to enqueue record(s). The LUA enqueue script returned the wrong count of items {result.Count}, expected {messageCount * 2}");
            }

            for (var i = 0; i < result.Count; i = i + 2) //note that we pull items as pairs
            {
                rc.Add(new QueueOutputMessage(sentMessageFactory.Create(new RedisQueueId(result[i]),
                                                                        new RedisQueueCorrelationId(new Guid(result[i + 1])))));
            }
            return(rc);
        }