MassTransit / RabbitMQ发送与发布以及故障<>问题

时间:2018-10-11 18:54:03

标签: rabbitmq masstransit

我有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(跳过的队列)。

1 个答案:

答案 0 :(得分:0)

根据经验,如果您的消息到达死信队列(跳过),则意味着消息类型交换和队列交换之间存在绑定,但是端点没有给定消息的使用者类型。

通常是这样,当您以前有一个消费者然后将其删除时。 MassTransit不会为您删除绑定,但也不会知道如何处理不断出现的消息。

您可以通过执行以下操作进入RMQ管理UI来删除过时的绑定:

  • 打开端点队列
  • 单击绑定,那里只有一个,指向端点交换
  • 点击链接以打开端点交换,并查看与消息类型交换的绑定
  • 在那里,您可以删除不再需要的那些绑定

如果队列中没有消息,也可以将其删除,MassTransit将从头开始为您创建所有内容。

相关问题