MassTransit 创建的 RabbitMQ 拓扑

RabbitMQ topology created by MassTransit

我正在尝试了解 MT 在 RabbitMQ 中创建的 topology of queues 和交换。

我无法得到这两个语句:

  • we generate an exchange for each queue so that we can do direct sends to the queue. it is bound as a fanout exchange (is it about sending vs publishing?)

  • control queues are exclusive and auto-delete - they go away when you go away and are not shared.

MT要发私信干什么?这是否与 MT 内部使用的 control queues 有关?

也没有提到dead letter queue,是不是暗示MT不支持开箱即用? 哎呀,看错地方了。是 here

Michael Aldworth 在他出色的 MassTransit Send vs. Publish 博客 post 中对此进行了详细描述。

本质上,对于每个 MT 端点,您都会得到一个 exchange-queue 对,它以端点配置中的 queueName 参数值命名。另一方面,主题是以消息合约完整类型名称命名的 RabbitMQ 交换器。

发布

您向主题发送消息,意思是向消息类型交换。 MassTransit 在启动时创建消息类型交换和 queue-name 交换之间的绑定。以这种方式,订阅在 RabbitMQ 级别上工作。发布者永远不知道谁会收到发布的消息,如果有人的话。

发送

但发送时需要指定收件人地址。通过这样做,您指示 MassTransit 将消息直接传递到 queue-name 交换。这里涉及的message-type交换和queue-name交换没有绑定关系。因此,即使在目标服务中没有此类消息的使用者,也会传递消息。在这种情况下,消息将被移动到死信队列 (queue-name_Skipped)。