示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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));
        }