Rebus和RabbitMQ、非持久消息和请求-应答对等点的理想设置
我正在探索一起使用REBS和RabbitMQ来涵盖两种不同的场景 场景A 我希望能够有一个中央服务器将通知推送到任意订阅者的列表,但消息不需要持久或持久。如果订阅服务器已连接,它们应该会收到通知,但如果它们断开连接,则无需为任何客户端排队消息 在到目前为止的测试中,我能够让生产者和消费者与Rebus和RabbitMQ、非持久消息和请求-应答对等点的理想设置,rabbitmq,rebus,Rabbitmq,Rebus,我正在探索一起使用REBS和RabbitMQ来涵盖两种不同的场景 场景A 我希望能够有一个中央服务器将通知推送到任意订阅者的列表,但消息不需要持久或持久。如果订阅服务器已连接,它们应该会收到通知,但如果它们断开连接,则无需为任何客户端排队消息 在到目前为止的测试中,我能够让生产者和消费者与UseRabbitMqInOneWayMode()和ManageSubscriptions()进行通信,但是,当没有订阅者或订阅者断开连接时,消息会在RabbitMQ中累积。我已尝试将RabbitMqMessa
UseRabbitMqInOneWayMode()
和ManageSubscriptions()
进行通信,但是,当没有订阅者或订阅者断开连接时,消息会在RabbitMQ中累积。我已尝试将RabbitMqMessageQueue.InternalHeaders.Message耐久性的头设置为false,但没有效果。我怀疑这是因为Rebus设置的默认队列是持久的。在Rebus中是否有控制这种行为的方法
场景B
当客户端联机或断开连接时,我想在客户端之间设置一个请求/回复通道。例如:
客户端A和客户端B连接
客户端A将发送一条消息,请求只有客户端B拥有的数据。客户端B收集信息,并回复给A
客户端B断开连接
客户端A从客户端B请求数据,由于客户端B不再可用,因此应收到一个错误
对于这种情况,推荐的配置是什么
谢谢。我不是RabbitMQ方面的专家,因此REBS对RabbitMQ的支持主要来自社区贡献
我认为通过使用RabbitMQ“自动删除队列”的概念,场景A可以很容易地解决,您可以使用如下Rebus配置:
用(…)配置
.Transport(t=>t.UseRabbitMq(…)
.ManageSubscriptions()
.AutoDeleteInputQueue())
.(..)
这会导致RabbitMQ在最后一个订阅者断开连接时删除队列
在场景B中,我觉得您最好使用用于同步通信的东西,因为这才是您真正想要的。我建议您使用HTTP,因为它非常擅长请求/回复:)谢谢您的建议@mookid8000,。AutoDeleteInputQueue()
正是我想要的。我将更多地考虑如何处理场景B,但这让我走得相当远。谢谢@mookid8000我在Rebus2上找不到AutoDeleteInputQueue。它被移除了吗?不幸的是,是的。。。感谢你的答复,这是一件复杂的事情。我正在考虑使用此功能为非常不稳定的订户节点提供非持久性队列。例如,在一个场景中,我需要将一个事件传递到集群中的所有计算机,但是这些计算机是定期创建和销毁的。@mookid8000您计划将来支持此功能吗?它非常有用。