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); }