Rebus和RabbitMQ的理想设置,非持久消息和请求 - 回复对等体

时间:2015-03-30 21:57:39

标签: rabbitmq rebus

我正在探索使用Rebus和RabbitMQ来涵盖几种不同的场景。

情景A 我希望能够将中央服务器推送通知发送到任意订户列表,但消息不需要持久或持久。如果订户已连接,他们应该收到通知,但如果他们断开连接,则无需为任何客户端排队消息。

到目前为止,在我的测试中,我能够让生产者和消费者与UseRabbitMqInOneWayMode()ManageSubscriptions()进行通信,但是,如果没有订阅者,或者如果有消息,则会在RabbitMQ中建立消息订户断开连接。我已经尝试将RabbitMqMessageQueue.InternalHeaders.MessageDurability的标头设置为false,但它没有效果。我怀疑这是因为Rebus设置的默认队列是持久的。在Rebus中有办法控制这种行为吗?

情景B 当客户上线或断开连接时,我想在客户端之间设置请求/回复通道。例如:

  1. 客户端A和客户端B连接
  2. 客户端A将发送一条消息,请求仅客户B拥有的数据。客户B收集信息,并回复A。
  3. 客户B断开连接
  4. 客户端A向客户端B请求数据,并且应该收到错误,因为B不再可用。
  5. 这种情况的推荐配置是什么?

    感谢。

1 个答案:

答案 0 :(得分:1)

我不是RabbitMQ的专家,所以Rebus对RabbitMQ的支持主要来自社区贡献。

我认为通过使用"自动删除队列"的RabbitMQ概念可以很容易地解决场景A,您可以使用Rebus配置这样:

Configure.With(...) .Transport(t => t.UseRabbitMq(...) .ManageSubscriptions() .AutoDeleteInputQueue()) .(..)

导致RabbitMQ在最后一个订户断开连接时删除队列。

在场景B中,我觉得你会因为同步通信的内容而变得更好,因为那是你真正想要的。我建议你使用HTTP,因为它非常擅长做请求/回复:)