Esempio n. 1
0
        private async Task PollMessageReceiever(IBatchMessageReceiver receiver) // TODO: Support cancellation
        {
            var stopwatch        = new Stopwatch();
            var messageForwarder = this.destinationConfiguration.MessageForwarderFactory();

            while (true)
            {
                try
                {
                    stopwatch.Restart();
                    var messages = (await receiver.ReceieveMessages(sourceConfiguration.ReceiveBatchSize).ConfigureAwait(false)).ToArray();
                    logger.Debug($"Received {messages.Length} messages from the source. Took {stopwatch.Elapsed}");
                    stopwatch.Restart();
                    var sentMessageTokens = (await messageForwarder.ForwardMessages(messages).ConfigureAwait(false)).ToArray();
                    logger.Debug($"Forwarded {sentMessageTokens.Length} messages to the destination. Took {stopwatch.Elapsed}");
                    stopwatch.Restart();
                    await receiver.CompleteMessages(sentMessageTokens).ConfigureAwait(false);

                    logger.Debug($"Completed {sentMessageTokens.Length} messages at the source. Took {stopwatch.Elapsed}");
                    metricHandler(new Metric("Forwarded messages", sentMessageTokens.Length));
                }
                catch (Exception e)
                {
                    logger.Error(e.Message, e);
                    metricHandler(new Metric("Exceptions thrown", 1));
                }
            }
        }
Esempio n. 2
0
        public async Task Setup()
        {
            namespaceConnectionString = Environment.GetEnvironmentVariable("NServiceBus.AzureServiceBusForwarder.ConnectionString", EnvironmentVariableTarget.Process);
            destinationQueue = GetType().Name;
            messageForwarder = A.Fake<IMessageForwarder>();
            messageReceiver = new QueueBatchMessageReceiver(QueueClient.CreateFromConnectionString(namespaceConnectionString, destinationQueue));

            await MessageEntityHelper.CreateQueue(destinationQueue);
            
            namespaceManager = NamespaceManager.CreateFromConnectionString(namespaceConnectionString);

            if (await namespaceManager.TopicExistsAsync(TopicName))
            {
                await namespaceManager.DeleteTopicAsync(TopicName);
            }

            await namespaceManager.CreateTopicAsync(TopicName);

            forwarder = new Forwarder(
                new ForwarderConfiguration(
                    new ForwarderSourceConfiguration(500, () => messageReceiver),
                    new ForwarderDestinationConfiguration(destinationQueue, () => messageForwarder)));
        }