Exemplo n.º 1
0
        public void DeclareExchangeFailWithEmptyName()
        {
            var messagingService = new MessagingService();

            Assert.Throws <ArgumentNullException>(() => messagingService.DeclareExchange(null));
            Assert.Throws <ArgumentNullException>(() => messagingService.DeclareExchange("    "));
        }
Exemplo n.º 2
0
        public static void Run()
        {
            var messagingService = new MessagingService();

            // RabbitMQ init
            messagingService.DeclareExchange("deadletter.exchange", Constants.ExchangeTypeFanout);
            messagingService.DeclareQueue("deadletter.queue");
            messagingService.DeclareBinding("deadletter.exchange", "deadletter.queue", "#");

            messagingService.DeclareExchange("delay.exchange", Constants.ExchangeTypeHeaders);
            messagingService.DeclareQueueWithDeadLetterPolicy("deadletter.queue.5", "deadletter.exchange", 5000, null);
            messagingService.DeclareQueueWithDeadLetterPolicy("deadletter.queue.30", "deadletter.exchange", 30000, null);

            messagingService.DeclareBinding("delay.exchange", "deadletter.queue.5", "#", new Dictionary <string, object> {
                { "delay", 5 }
            });
            messagingService.DeclareBinding("delay.exchange", "deadletter.queue.30", "#", new Dictionary <string, object> {
                { "delay", 30 }
            });

            var dateStart = DateTime.Now;

            // Get the publisher and publish messages
            using (var publisher = messagingService.GetPublisher("delay.exchange"))
            {
                // publish messages waiting 5s
                for (int i = 0; i <= 10; i++)
                {
                    var message = new Message($"delay.5.message.{i}", $"Waited 5s: {i} !");
                    message.Header.GetProperties().Add("delay", 5);
                    publisher.Publish(message);
                }
                // publish messages waiting 30s
                for (int i = 0; i <= 10; i++)
                {
                    var message = new Message($"delay.30.message.{i}", $"Waited 30s: {i} !");
                    message.Header.GetProperties().Add("delay", 30);
                    publisher.Publish(message);
                }
            }

            // Get the consumer on the existing queue and consume its messages
            var consumer = messagingService.GetConsumer("deadletter.queue");

            consumer.Consume((object sender, IMessagingEvent args) =>
            {
                var realDelay = DateTime.Now.Subtract(dateStart).TotalSeconds;
                Console.WriteLine(string.Format("{0} received after {1:#.##}s.", args.Message.GetRoutingKey(), realDelay));
                // send ACK: acknowlegdment to the queue
                consumer.AcknowlegdeDeliveredMessage(args);
            });
        }
Exemplo n.º 3
0
        public static void Run()
        {
            var messagingService = new MessagingService();

            // RabbitMQ init
            messagingService.DeclareExchange("simple.exchange");
            messagingService.DeclareQueue("simple.queue");
            messagingService.DeclareBinding("simple.exchange", "simple.queue", "simple.message.*");

            // Get the publisher and declare Exhange where publish messages
            using (var publisher = messagingService.GetPublisher("simple.exchange"))
            {
                // publish messages
                for (int i = 0; i <= 10; i++)
                {
                    publisher.Publish(new Message($"simple.message.test{i}", $"Hello world {i} !"));
                }
            }


            // Get the consumer on the existing queue and consume its messages
            var consumer = messagingService.GetConsumer("simple.queue");
            var random   = new Random();

            consumer.Consume((object sender, IMessagingEvent args) =>
            {
                // we simulate the delivery success
                if (random.Next() % 2 == 0)
                {
                    Console.WriteLine("Retry " + args.Message.GetRoutingKey());
                    // send NACK: negative acknowlegdment to the queue
                    consumer.RejectDeliveredMessage(args);
                }
                else
                {
                    Console.WriteLine(args.Message.GetBody());
                    // send ACK: acknowlegdment to the queue
                    consumer.AcknowlegdeDeliveredMessage(args);
                }
            });
        }
Exemplo n.º 4
0
        public static void Run()
        {
            var messagingService = new MessagingService();

            // RabbitMQ init
            messagingService.DeclareExchange("stop.exchange");
            messagingService.DeclareQueue("stop.queue");
            messagingService.DeclareBinding("stop.exchange", "stop.queue", "stop.message.* ");

            // Get the publisher and declare Exhange where publish messages
            using (var publisher = messagingService.GetPublisher("stop.exchange"))
            {
                // publish messages
                for (int i = 0; i <= 20; i++)
                {
                    publisher.Publish(new Message("stop.message.test" + i, $"Hello world {i} !"));
                }
            }

            // Get the consumer on the existing queue and consume its messages
            var consumer = messagingService.GetConsumer("stop.queue");

            consumer.Consume((object sender, IMessagingEvent args) =>
            {
                Console.WriteLine("Consumer Working: " + consumer.IsConsuming());

                // Process one message max every 10 ms
                System.Threading.Thread.Sleep(10);
                Console.WriteLine(args.Message.GetBody());
                // send ACK: acknowlegdment to the queue
                consumer.AcknowlegdeDeliveredMessage(args);
            });

            // Stop Consuming after 100 ms ~ 10 messages
            System.Threading.Thread.Sleep(100);
            Console.WriteLine("Consumer Stopping ...");
            consumer.StopConsuming((object sender, EventArgs args) =>
            {
                Console.WriteLine("Consumer Stopped: " + consumer.IsConsuming().ToString());
            });
        }