主题订阅者引发异常时,未处理的消息将到达{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的角度来看,这只是一个普通的队列。
如何将故障路由到主题ObjectCratedA / AnotherSubscriber的DLQ而不是**_error
呢?
谢谢。
答案 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();
});