我有2个应用程序,分别为appA和appB。它们分别具有aQueue和bQueue,这两个应用程序都具有ReceiveEndpoint。两个应用程序在RabbitMQ上使用相同的主机。
appA正在使用bus.Send方法将命令CreateEntityCommand发送到appB到bQueue中。
在appB中,我有一个使用CreateEntityCommand的使用者。
**到目前为止很好**
问题1: 如果我的appB使用者成功创建了实体,则我正在发布EntityCreatedEvent。我在appA中的EntityCreatedEvent使用者正确了,但是该事件也添加到了bQueue_skipped中,为什么?
问题2: 现在,如果我的appB使用者有异常,则必须通知我的appA。在bQueue中生成了一个Fault。我希望我的appA消耗Fault,但是Fault自动出现在bQueue上。如果我在appA中将ReceiveEndpoint添加到列出的bQueue中,则会出现很多dead_letter(跳过的队列)。
答案 0 :(得分:0)
根据经验,如果您的消息到达死信队列(跳过),则意味着消息类型交换和队列交换之间存在绑定,但是端点没有给定消息的使用者类型。
通常是这样,当您以前有一个消费者然后将其删除时。 MassTransit不会为您删除绑定,但也不会知道如何处理不断出现的消息。
您可以通过执行以下操作进入RMQ管理UI来删除过时的绑定:
如果队列中没有消息,也可以将其删除,MassTransit将从头开始为您创建所有内容。