public async Task DeliverAfter(NimbusMessage message, DateTimeOffset deliveryTime)
        {
            if (await _queueManager.QueueExists(message.DeliverTo))
            {
                message.DeliverAfter = deliveryTime;
                var messageSender = await _queueManager.CreateMessageSender(message.DeliverTo);

                var message2 = await _brokeredMessageFactory.BuildMessage(message);

                await messageSender.SendAsync(message2);

                return;
            }

            if (await _queueManager.TopicExists(message.DeliverTo))
            {
                message.DeliverAfter = deliveryTime;
                var topicSender = await _queueManager.CreateTopicSender(message.DeliverTo);

                var message2 = await _brokeredMessageFactory.BuildMessage(message);

                await topicSender.SendAsync(message2);

                return;
            }

            throw new NotSupportedException("Message redelivery was requested but neither a queue path nor a topic path could be found.");
        }
Exemple #2
0
        public async Task Send(NimbusMessage message)
        {
            await _retry.DoAsync(async() =>
            {
                var brokeredMessage = await _brokeredMessageFactory.BuildMessage(message);


                var messageSender = GetMessageSender();
                try
                {
                    await messageSender.SendAsync(brokeredMessage);
                }
                catch (MessagingEntityNotFoundException exc)
                {
                    _logger.Error(exc, "The referenced queue {QueuePath} no longer exists", _queuePath);
                    await _queueManager.MarkQueueAsNonExistent(_queuePath);
                    await DiscardMessageSender();
                    throw;
                }
                catch (Exception)
                {
                    await DiscardMessageSender();
                    throw;
                }
            },
                                 "Sending message to queue").ConfigureAwaitFalse();
        }
        public async Task Send(NimbusMessage nimbusMessage)
        {
            await _retry.DoAsync(async() =>
            {
                var message = await _brokeredMessageFactory.BuildMessage(nimbusMessage);

                var topicClient = GetTopicClient();
                try
                {
                    await topicClient.SendAsync(message);
                }
                catch (MessagingEntityNotFoundException exc)
                {
                    _logger.Error(exc, "The referenced topic path {TopicPath} no longer exists", _topicPath);
                    await _queueManager.MarkTopicAsNonExistent(_topicPath);
                    DiscardTopicClient();
                    throw;
                }
                catch (Exception)
                {
                    DiscardTopicClient();
                    throw;
                }
            },
                                 "Sending message to topic").ConfigureAwaitFalse();
        }
        public async Task Post(NimbusMessage nimbusMessage)
        {
            var messageSender = await _queueManager.CreateDeadQueueMessageSender();

            var message = await _brokeredMessageFactory.BuildMessage(nimbusMessage);

            await messageSender.SendAsync(message);
        }