示例#1
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);
            });
        }