/// <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; }
/// <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; }
/// <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; }
/// <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; }
/// <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; }
/// <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); }