1

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

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

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

场景 B 当客户端上线或断开连接时,我想在客户端之间建立一个请求/回复通道。例如:

  1. 客户端 A 和客户端 B 连接
  2. 客户端 A 将发送一条消息,请求只有客户端 B 拥有的数据。客户 B 收集信息,然后回复给 A。
  3. 客户端 B 断开连接
  4. 客户端 A 向客户端 B 请求数据,并且由于 B 不再可用而应收到错误消息。

这种情况下推荐的配置是什么?

谢谢。

4

1 回答 1

1

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

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

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

这会导致 RabbitMQ 在最后一个订阅者断开连接时删除队列。

在场景 B 中,在我看来,使用用于同步通信的东西会更好,因为那是你真正想要的。我建议您使用 HTTP,因为它非常擅长请求/回复 :)

于 2015-03-31T07:16:21.780 回答