我只是想澄清我对 MassTransit 在消费者在 subscriptionEndpoint 内抛出异常的情况下如何表现的理解,我相信这就是过程:
我最不清楚的是最后一点。消息是否被标记为已使用并从代理中删除,或者是否算作故障,以便我们在 Azure 主题订阅的 DLQ 和错误队列中拥有一条消息?
如果最终确实出现死信,MassTransit 是否明确将其标记为死信,以便 Azure 服务总线不会尝试重试向消费者交付(例如,如果订阅的重试计数为 10)?
提前致谢
此故障消息已移至错误队列。
这是不正确的,订阅端点没有错误队列。仅使用 Azure 服务总线 DLQ。是的,一旦重试次数用完,该消息就会被发送到订阅的 DLQ 中。
如果使用者进程崩溃,消息将通过 Azure 服务总线重新传送到 MassTransit,最多达到 MaxDeliveryCount(默认为 10)。一旦达到最大传递计数(假设进程每次都会崩溃),ASB 会将消息移动到订阅的 DLQ。
当 MassTransit 将消息移动到 DLQ 时,它会添加描述发生的异常、过程等的标头。ASB 不会添加任何内容。
MassTransit 仅在消费者无一例外地成功消费消息后才会确认该消息,然后允许 ASB 将其从队列中删除。
您没有询问的一个额外说明是,消息重新传递不适用于订阅,因为它们不可寻址。如果 Azure 添加了延迟重新投递功能(基本上是更改消息的可见性以延迟投递),那么 MassTransit 将在 SDK 中提供后立即支持它。