public void Execute()
        {
            var url = Properties.Settings.Default.RabbitMqUrl;

            using (var connectionFactory = new DisposableConnectionFactory())
            using (var connection = connectionFactory.Create(url))
            using (var channel = connection.CreateModel())
            {
                channel.ExchangeDeclare<UsableMessage>(RabbitMQ.Client.ExchangeType.Topic);
            }
        }
        public void Execute()
        {
            var url = Properties.Settings.Default.RabbitMqUrl;

            using (var connectionFactory = new DisposableConnectionFactory())
            using (var connection = connectionFactory.Create(url))
            using (var channel = connection.CreateModel())
            {

                channel.ExchangeDeclare<UsableMessage>(ExchangeType.Fanout);
                channel.QueueDeclare<UsableMessage>();
                channel.QueueBind<UsableMessage>(routingKey:"some key");
            }
        }
        public void Execute()
        {
            var url = Properties.Settings.Default.RabbitMqUrl;

            using(var connectionFactory = new DisposableConnectionFactory())
            using(var connection = connectionFactory.Create(url))
            using (var channel = connection.CreateModel())
            {
                var message = new UsableMessage {Description = "Hello world!"};
                const string exchange = "TheUsableMessageExchange";

                channel.PublishAsJson(message, exchange);
            }
        }
        public void Execute()
        {
            var url = Properties.Settings.Default.RabbitMqUrl;

            using (var connectionFactory = new DisposableConnectionFactory())
            using (var connection = connectionFactory.Create(url))
            using (var channel = connection.CreateModel())
            {
                
                const string queueName = "TheUsableMessageQueue";

                channel.QueueDeclare(queue: queueName, durable: false, exclusive: false, autoDelete: true,arguments:null);
            }
        }
        public void Execute()
        {
            var url = Properties.Settings.Default.RabbitMqUrl;

            using(var connectionFactory = new DisposableConnectionFactory())
            using(var connection = connectionFactory.Create(url))
            using (var channel = connection.CreateModel())
            {
                var messages = new[]
                    {
                        new UsableMessage{Description = "Message1"},
                        new UsableMessage{Description = "Message2"},
                    };
                const string exchange = "TheUsableMessageExchange";

                channel.PublishCollectionAsJsonAsync(messages, exchange);
            }
        }
        public void Execute()
        {
            var url = Properties.Settings.Default.RabbitMqUrl;

            using (var connectionFactory = new DisposableConnectionFactory())
            using (var connection = connectionFactory.Create(url))
            using (var channel = connection.CreateModel())
            using (var subscriptionFactory = new SubscriptionFactory())
            using (var subscription = subscriptionFactory.Create(channel:channel,queueName:"TheUsableMessageQueue"))
            {
                
                foreach (var message in subscription.Messages)
                {
                    var messageBody = message.BodyAsJson<UsableMessage>();
                    ProcessMessage(messageBody);
                    
                    subscription.Ack(message);
                }
            }
        }