public async Task SetUp()
        {
            receivedMessages = new BlockingCollection <IncomingMessage>();

            var connectionString = Environment.GetEnvironmentVariable("RabbitMQTransport_ConnectionString") ?? "host=localhost";

            var useTls = connectionString.StartsWith("https", StringComparison.InvariantCultureIgnoreCase) || connectionString.StartsWith("amqps", StringComparison.InvariantCultureIgnoreCase);

            var transport        = new RabbitMQTransport(RoutingTopology.Conventional(QueueType.Classic), connectionString);
            var connectionConfig = transport.ConnectionConfiguration;

            connectionFactory = new ConnectionFactory(ReceiverQueue, connectionConfig, null, true, false, transport.HeartbeatInterval, transport.NetworkRecoveryInterval, null);

            infra = await transport.Initialize(new HostSettings(ReceiverQueue, ReceiverQueue, new StartupDiagnosticEntries(),
                                                                (_, __, ___) => { }, true), new[]
            {
                new ReceiveSettings(ReceiverQueue, new QueueAddress(ReceiverQueue), true, true, "error")
            }, AdditionalReceiverQueues.Concat(new[] { ErrorQueue }).ToArray());

            messageDispatcher   = infra.Dispatcher;
            messagePump         = infra.Receivers[ReceiverQueue];
            subscriptionManager = messagePump.Subscriptions;

            await messagePump.Initialize(new PushRuntimeSettings(MaximumConcurrency),
                                         (messageContext, cancellationToken) =>
            {
                receivedMessages.Add(new IncomingMessage(messageContext.NativeMessageId, messageContext.Headers,
                                                         messageContext.Body), cancellationToken);
                return(Task.CompletedTask);
            }, (_, __) => Task.FromResult(ErrorHandleResult.Handled)
                                         );

            await messagePump.StartReceive();
        }
        public async Task SetUp()
        {
            receivedMessages = new BlockingCollection <IncomingMessage>();

            var connectionString = Environment.GetEnvironmentVariable("RabbitMQTransport_ConnectionString");

            if (string.IsNullOrEmpty(connectionString))
            {
                throw new Exception("The 'RabbitMQTransport_ConnectionString' environment variable is not set.");
            }

            var useTls = connectionString.StartsWith("https", StringComparison.InvariantCultureIgnoreCase) || connectionString.StartsWith("amqps", StringComparison.InvariantCultureIgnoreCase);

            var transport = new RabbitMQTransport(Topology.Conventional, connectionString);

            connectionFactory = new ConnectionFactory(ReceiverQueue, transport.Host, transport.Port ?? 5672,
                                                      transport.VHost, transport.UserName, transport.Password, useTls, null, false,
                                                      false, transport.HeartbeatInterval, transport.NetworkRecoveryInterval, null);

            infra = await transport.Initialize(new HostSettings(ReceiverQueue, ReceiverQueue, new StartupDiagnosticEntries(),
                                                                (_, __, ___) => { }, true), new[]
            {
                new ReceiveSettings(ReceiverQueue, ReceiverQueue, true, true, "error")
            }, AdditionalReceiverQueues.Concat(new[] { ErrorQueue }).ToArray());

            messageDispatcher   = infra.Dispatcher;
            messagePump         = infra.Receivers[ReceiverQueue];
            subscriptionManager = messagePump.Subscriptions;

            await messagePump.Initialize(new PushRuntimeSettings(MaximumConcurrency),
                                         (messageContext, cancellationToken) =>
            {
                receivedMessages.Add(new IncomingMessage(messageContext.NativeMessageId, messageContext.Headers,
                                                         messageContext.Body), cancellationToken);
                return(Task.CompletedTask);
            }, (_, __) => Task.FromResult(ErrorHandleResult.Handled)
                                         );

            await messagePump.StartReceive();
        }