public async Task CreatePriorityPublishAndConsume()
        {
            var connectionFactory = CreateConnectionFactory();

            using (var queueClient = new RabbitMQClient(connectionFactory))
            {
                var queueName = $"IntegratedTestQueue_{Guid.NewGuid()}";

                await queueClient.EnsureQueueExistsAsync(queueName, autoDelete : true, arguments : new Dictionary <string, object> {
                    { "x-max-priority", 1 }
                });

                await queueClient.PublishAsync("", queueName, "TestValue123", 0);

                await queueClient.PublishAsync("", queueName, "TestValue456", 1);

                await queueClient.PublishAsync("", queueName, "TestValue789", 1);

                await queueClient.PublishAsync("", queueName, "TestValue321", 0);

                var receivedMessages = new List <string>();

                var worker = await SimpleProcessingWorker <string> .CreateAndStartAsync(queueClient, queueName,
                                                                                        message =>
                {
                    DoSomething(message, out var receivedMessage);

                    receivedMessages.Add(receivedMessage);
                }, CancellationToken.None);

                const int timeLimit = 10000;

                var elapsedTime = 0;

                while (receivedMessages.Count < 4 && elapsedTime < timeLimit)
                {
                    await Task.Delay(100);

                    elapsedTime += 100;
                }

                worker.Stop();

                receivedMessages.Count.ShouldBe(4);
                receivedMessages[0].ShouldBe("TestValue456");
                receivedMessages[1].ShouldBe("TestValue789");
                receivedMessages[2].ShouldBe("TestValue123");
                receivedMessages[3].ShouldBe("TestValue321");
            }
        }
        public async Task AdvancedCreatePublishAndConsume()
        {
            var connectionFactory = CreateConnectionFactory();

            using (var queueClient = new RabbitMQClient(connectionFactory))
            {
                var queueName = $"IntegratedTestQueue_{Guid.NewGuid()}";

                await queueClient.EnsureQueueExistsAsync(queueName, autoDelete : true);

                await queueClient.PublishAsync("", queueName, "TestValue123");

                var receivedMessage = "";

                var worker = await AdvancedProcessingWorker <string> .CreateAndStartAsync(queueClient, queueName,
                                                                                          message => DoSomething(message, out receivedMessage), CancellationToken.None);

                const int timeLimit = 10000;

                var elapsedTime = 0;

                while (receivedMessage == "" && elapsedTime < timeLimit)
                {
                    await Task.Delay(100);

                    elapsedTime += 100;
                }

                worker.Stop();

                receivedMessage.ShouldBe("TestValue123");
            }
        }