Example #1
0
        private static void Main()
        {
            const String         routingKey  = "routing_key";
            const String         endpointUrl = "amqp://*****:*****@localhost:5672/";
            IMessageTypeResolver resolver    = new MessageBindingResolver(typeof(Foo).GetTypeInfo().Assembly);

            var broker = Broker.New(_ =>
            {
                _.Endpoint(new Uri(endpointUrl, UriKind.Absolute));
                _.ResolveMessageTypeBy(resolver);
            });

            var exchange = broker.DeclareDirectExchange("source_exchange");
            var queue    = broker.DeclareQueue("my_test_queue");

            broker.DeclareExchangeBinding(exchange, queue, routingKey);
            broker.SubscribeByAtLeastOnce(queue,
                                          _ =>
            {
                _.FallbackBy((c, a) => DeadLetterStrategy.New(c, a, x => $"{x}-Error"));
                _.Consumes(new FooConsumer1());
            });
            broker.SubscribeByAtLeastOnce(queue,
                                          _ =>
            {
                _.FallbackBy((c, a) => DeadLetterStrategy.New(c, a, x => $"{x}-Error"));
                _.Consumes(new FooConsumer2());
            });
            var connection = broker.Connect();

            for (var i = 0; i < 5; i++)
            {
                var message = new OutboundMessage <Foo>(new Foo {
                    Bar = i
                });
                connection.PublishAsync(message, exchange, routingKey);
            }

            Console.ReadLine();
            connection.Dispose();
        }
        public void DeadLetterExchangeStrategy()
        {
            var args                = FakeBasicDeliverEventArgs();
            var message             = new FakeConsumedMessage(null, args);
            var broker              = new Mock <IBroker>();
            var queue               = new Queue("queue_name");
            Func <String, String> f = _ => $"{_}-DeadLetter";
            var dleName             = f(queue.Name);

            broker.Setup(_ => _.DeclareDurableDirectExchange(dleName)).Returns(new Exchange(dleName, "direct"));
            var strategy = DeadLetterStrategy.New(broker.Object,
                                                  queue,
                                                  _ => $"{_}-DeadLetter");
            var outboundChannel = new Mock <IOutboundChannel>();

            strategy.Apply(outboundChannel.Object, message);
            outboundChannel.Verify(_ => _.ForwardAsync(message,
                                                       It.Is <Exchange>(__ => __.Name == dleName),
                                                       String.Empty),
                                   Times.Once);
        }