我正在探索使用Rebus和RabbitMQ来涵盖几种不同的场景。
情景A 我希望能够将中央服务器推送通知发送到任意订户列表,但消息不需要持久或持久。如果订户已连接,他们应该收到通知,但如果他们断开连接,则无需为任何客户端排队消息。
到目前为止,在我的测试中,我能够让生产者和消费者与UseRabbitMqInOneWayMode()
和ManageSubscriptions()
进行通信,但是,如果没有订阅者,或者如果有消息,则会在RabbitMQ中建立消息订户断开连接。我已经尝试将RabbitMqMessageQueue.InternalHeaders.MessageDurability
的标头设置为false,但它没有效果。我怀疑这是因为Rebus设置的默认队列是持久的。在Rebus中有办法控制这种行为吗?
情景B 当客户上线或断开连接时,我想在客户端之间设置请求/回复通道。例如:
这种情况的推荐配置是什么?
感谢。
答案 0 :(得分:1)
我不是RabbitMQ的专家,所以Rebus对RabbitMQ的支持主要来自社区贡献。
我认为通过使用"自动删除队列"的RabbitMQ概念可以很容易地解决场景A,您可以使用Rebus配置这样:
Configure.With(...)
.Transport(t => t.UseRabbitMq(...)
.ManageSubscriptions()
.AutoDeleteInputQueue())
.(..)
导致RabbitMQ在最后一个订户断开连接时删除队列。
在场景B中,我觉得你会因为同步通信的内容而变得更好,因为那是你真正想要的。我建议你使用HTTP,因为它非常擅长做请求/回复:)