public async Task Send(NimbusMessage message) { var messageClone = (NimbusMessage)_serializer.Deserialize(_serializer.Serialize(message), typeof(NimbusMessage)); AsyncBlockingCollection <NimbusMessage> messageQueue; if (!_messageStore.TryGetExistingMessageQueue(_queue.QueuePath, out messageQueue)) { _logger.Warn("A message was sent to an in-process queue {QueuePath} but nobody is listening on that queue. Not sending.", _queue.QueuePath); return; } await messageQueue.Add(messageClone); }
private async Task AddToCompetingSubscribersQueue(NimbusMessage message) { var clone = Clone(message); AsyncBlockingCollection <NimbusMessage> topicQueue; if (!_messageStore.TryGetExistingMessageQueue(_topic.TopicPath, out topicQueue)) { _logger.Warn("A message was sent to an in-process topic {TopicPath} but nobody is listening on that topic. Not sending.", _topic.TopicPath); return; } await topicQueue.Add(clone); }
public Task DeliverAfter(NimbusMessage message, DateTimeOffset deliveryTime) { // Deliberately not awaiting this task. We want it to run in the background. Task.Run(async() => { var delay = deliveryTime.Subtract(_clock.UtcNow); if (delay < TimeSpan.Zero) { delay = TimeSpan.Zero; } await Task.Delay(delay); AsyncBlockingCollection <NimbusMessage> queue; if (!_messageStore.TryGetExistingMessageQueue(message.DeliverTo, out queue)) { return; } await queue.Add(message); }).ConfigureAwaitFalse(); return(Task.Delay(0)); }