Rebus和RabbitMQ、非持久消息和请求-应答对等点的理想设置

Rebus和RabbitMQ、非持久消息和请求-应答对等点的理想设置,rabbitmq,rebus,Rabbitmq,Rebus,我正在探索一起使用REBS和RabbitMQ来涵盖两种不同的场景 场景A 我希望能够有一个中央服务器将通知推送到任意订阅者的列表,但消息不需要持久或持久。如果订阅服务器已连接,它们应该会收到通知,但如果它们断开连接,则无需为任何客户端排队消息 在到目前为止的测试中,我能够让生产者和消费者与UseRabbitMqInOneWayMode()和ManageSubscriptions()进行通信,但是,当没有订阅者或订阅者断开连接时,消息会在RabbitMQ中累积。我已尝试将RabbitMqMessa

我正在探索一起使用REBS和RabbitMQ来涵盖两种不同的场景

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

在到目前为止的测试中,我能够让生产者和消费者与
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您计划将来支持此功能吗?它非常有用。