使用Masstransit和Azure Service Bus将故障消息发送到主题订阅死信队列

时间:2018-11-30 08:42:17

标签: masstransit

主题订阅者引发异常时,未处理的消息将到达{subscribername}_error队列中。

举个例子:

const string subsriberName = "AnotherSubscriber";
cfg.SubscriptionEndpoint<AnotherThingHappened>(host, subsriberName, configurator =>
{
    configurator.Handler<AnotherThingHappened>(context =>
    {
        Console.WriteLine(context.Message.AnotherThingType);
        if (Random.NextDouble() < 0.1)
        {
            throw new Exception("Oups, I failed :(");
        }
        return Task.CompletedTask;
    });
});

它在主题ObjectCreatedA上创建了“ AnotherSubscriber”订阅。但是,如果失败,则消息将进入队列anothersubscriber_error。它使诊断,监视和重播消息变得更加困难。因为从ASB的角度来看,这只是一个普通的队列。

enter image description here

如何将故障路由到主题ObjectCratedA / AnotherSubscriber的DLQ而不是**_error呢?

谢谢。

1 个答案:

答案 0 :(得分:3)

从MassTransit 6.2开始,这已经成为可能,请参见相关的GitHub issue

您的配置现在需要类似于:

cfg.SubscriptionEndpoint(
    "my-subscription",
    "my-topic",
    e =>
    {
        e.ConfigureConsumer<MyConsumer>(provider);
        // Send failures to built-in Azure Service Bus Dead Letter queue
        e.ConfigureDeadLetterQueueDeadLetterTransport();
        e.ConfigureDeadLetterQueueErrorTransport();
    });