耐用与短暂订阅

时间:2017-11-08 17:01:03

标签: rabbitmq masstransit

我正在使用RabbitMQ和MassTransit使用pub / sub消息传递集成几个.Net模块。大多数消息订阅应该是持久的。但有些应该是短暂的。当消费者死亡时,不应存储消息,并且应丢弃已经排队的消息。

在每个模块中,我创建了1个带有2个接收端点的总线。一个配置为持久和非自动删除。另一个配置为非持久和自动删除。每个人都有自己的消费者。这可以按预期工作。

现在我正在尝试实现请求/响应消息。问题就出现了,因为现在发送方必须决定要路由到哪个交换机。这是错误的,因为我希望接收器决定是使用持久队列还是暂时队列。

我的问题:

  1. 有没有更好的方法同时支持持久和暂时订阅?

  2. 为什么MassTransit将消息交换绑定到端点队列的端点交换?为什么消息交换不能直接绑定到端点队列?

  3. 让我们假设一个模块中的所有请求使用者都是持久的或瞬态的。是否可以声明一个“模块”-exchange然后绑定到持久或临时队列?因此发送方解决模块交换,模块决定绑定哪个队列。如何说服MassTransit这样做? enter image description here

  4. 模块正在使用持久订阅,通过重新启动模块和代理来生存。一段时间后,admin(因此在系统的运行时)决定断开此模块与系统的连接。模块可以以某种方式取消订阅所有内容并让MassTransit删除持久的交换和队列吗?

1 个答案:

答案 0 :(得分:0)

您的问题始于发送到未知端点的请求/响应,最后是删除交换。我想这些是不同的东西。

我无法逐点回答,只会尝试清理事情。

根据定义,请求/响应要求您知道发送内容的位置。根据MassTransit约定,端点地址始终是交换/队列对地址。因此,您不能让接收方决定谁将处理此消息,它将被传递到您发送给它的端点的交换/队列。

关于“取消订阅” - MassTransit不会删除任何内容。您必须清除未手动使用的绑定或使用管理API。