Activemq 为什么暂停队列不是代理功能?

Activemq 为什么暂停队列不是代理功能?,activemq,Activemq,我正在寻找一个ActiveMQ broker管理命令,告诉它暂停队列-即: 继续接受来自生产客户端的消息 停止向消费客户机交付,允许队列积压增加,直到队列恢复,然后将积压发送给客户机 我找不到这样的命令。最常见的答案是它应该在客户端进行管理——也就是说,找到每个消费者并阻止它。其他答案是变通办法,比如操纵网络路由或防火墙,使客户端和代理无法再通信 对其他消息队列的粗略调查表明,ActiveMQ在这方面并不少见 在我看来,有两个原因可能无法实现此功能: 这很难实现,但我想不出任何理由 这与消

我正在寻找一个ActiveMQ broker管理命令,告诉它暂停队列-即:

  • 继续接受来自生产客户端的消息
  • 停止向消费客户机交付,允许队列积压增加,直到队列恢复,然后将积压发送给客户机
我找不到这样的命令。最常见的答案是它应该在客户端进行管理——也就是说,找到每个消费者并阻止它。其他答案是变通办法,比如操纵网络路由或防火墙,使客户端和代理无法再通信

对其他消息队列的粗略调查表明,ActiveMQ在这方面并不少见

在我看来,有两个原因可能无法实现此功能:

  • 这很难实现,但我想不出任何理由
  • 这与消息队列的设计理念背道而驰

它是哪一个,为什么?

可能不太复杂,难以实现——正如您所说。 我不知道这是否是一个积极的设计决策,如果没有需求。其他类似的产品,如IBM WebSphere MQ,在队列上实现了“禁止获取/放置”,因此它显然并不完全违背消息传递的理念,而是一种操作和故障排除实时系统的工具

我有点偏颇,但实际上我喜欢将发送方与接收方分离(如果是两个不同的系统,可能最终会被切换/升级/更改..)

一种简单的分离系统的方法是让发送方发送一个队列“DATA.OUT”,让接收方监听另一个队列“DATA.IN”。然后,您可以使用Apache Camel(它通常与ActiveMQ捆绑在一起以实现企业集成模式)从DATA.OUT路由到DATA.IN

骆驼路线可以通过JMX启动/停止,这将实现与您描述的类似的功能


我想ActiveMQ的设计应该是在中间件层,比如Apache Camel,而不是直接在队列上完成这类工作。

可能不会太复杂,难以实现——正如您所说。 我不知道这是否是一个积极的设计决策,如果没有需求。其他类似的产品,如IBM WebSphere MQ,在队列上实现了“禁止获取/放置”,因此它显然并不完全违背消息传递的理念,而是一种操作和故障排除实时系统的工具

我有点偏颇,但实际上我喜欢将发送方与接收方分离(如果是两个不同的系统,可能最终会被切换/升级/更改..)

一种简单的分离系统的方法是让发送方发送一个队列“DATA.OUT”,让接收方监听另一个队列“DATA.IN”。然后,您可以使用Apache Camel(它通常与ActiveMQ捆绑在一起以实现企业集成模式)从DATA.OUT路由到DATA.IN

骆驼路线可以通过JMX启动/停止,这将实现与您描述的类似的功能


我想ActiveMQ设计应该是在中间件层,比如Apache Camel,而不是直接在队列上做这些事情。

新发布的ActiveMQ 5.12.0支持暂停队列:

当队列“暂停”时:

  • 未向关联消费者发送任何消息

  • 仍要在队列上排队的消息

  • 能够浏览队列的能力

  • 队列的所有JMX计数器都可用且正确

已实现的暂停/恢复/暂停队列视图mbean ops和属性

暂停时,不会向常规队列使用者发送,发送 和正常浏览工作。任何机上消息都将在机上继续 直到恢复正常

如果启用了Jolokia(我认为现在默认情况下已启用),则可以使用类似以下curl请求的方法暂停队列:

curl --user admin:admin http://127.0.0.1:8161/api/jolokia/exec/org.apache.activemq:brokerName=localhost,destinationName=myQueue,destinationType=Queue,type=Broker/pause
(使用默认用户名、密码和代理名称以及名为myQueue的队列)


将“暂停”替换为“恢复”,以恢复队列。

新发布的ActiveMQ 5.12.0支持暂停队列:

当队列“暂停”时:

  • 未向关联消费者发送任何消息

  • 仍要在队列上排队的消息

  • 能够浏览队列的能力

  • 队列的所有JMX计数器都可用且正确

已实现的暂停/恢复/暂停队列视图mbean ops和属性

暂停时,不会向常规队列使用者发送,发送 和正常浏览工作。任何机上消息都将在机上继续 直到恢复正常

如果启用了Jolokia(我认为现在默认情况下已启用),则可以使用类似以下curl请求的方法暂停队列:

curl --user admin:admin http://127.0.0.1:8161/api/jolokia/exec/org.apache.activemq:brokerName=localhost,destinationName=myQueue,destinationType=Queue,type=Broker/pause
(使用默认用户名、密码和代理名称以及名为myQueue的队列)


将“暂停”替换为“恢复”,以恢复排队。

虽然这可以从理论上回答问题,但请在此处包含答案的基本部分,并提供链接以供参考。我同意这些意见,但我仍然感谢各位的提醒。谢谢。有代码示例吗?我需要利用这个feature@Stoan,我添加了一个使用curl/jolokia暂停的示例,虽然这可以从理论上回答问题,但在这里包括答案的基本部分,并提供链接供参考。我同意这些评论,但我仍然感谢大家的提醒。谢谢。有代码示例吗?我需要利用这个feature@Stoan,我添加了一个使用curl/jolokia暂停的示例