【问题标题】:Conditional publishing of messages有条件地发布消息
【发布时间】:2014-06-26 20:37:53
【问题描述】:

如果当前没有注册的监听器,是否可以配置消息队列不接受消息?

我想出的解决方案包括通过 API 查询队列信息,并据此决定做什么。这个解决方案似乎有一个缺陷,因为它不是事务性的(存在将消息发布到空队列中的边缘情况,或者我决定不发布它,即使在发布时消费者已经连接)。

【问题讨论】:

    标签: activemq message-queue


    【解决方案1】:

    您可以通过编写自己的AcitveMQ Plugin 来实现此行为。它使您可以访问当前代理状态,因此应该消除您所说的边缘情况。

    但是,我建议不要进行任何此类操作(无论它们是按照您的建议由客户端控制,还是通过插件由服务器控制)。原因是没有任何消费者的队列的消息无论如何都不会转发。因此,在某些时候,您必须支付检测到没有侦听器的成本(实际上,专用的客户端请求可能比简单地将消息发送到服务器更昂贵)。

    如果您使用的是持久队列,您甚至违反了它们的语义。

    如果您只是想避免客户端在连接时收到多条消息,请使用每个主题只有一个消费者的主题(以及非持久消息)。

    【讨论】:

      猜你喜欢
      • 2012-01-26
      • 2016-07-01
      • 1970-01-01
      • 2021-09-10
      • 2016-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多