Jms 当其他进程正在侦听队列或主题时,有哪些检测策略?

Jms 当其他进程正在侦听队列或主题时,有哪些检测策略?,jms,activemq,Jms,Activemq,我有一个系统(我们称之为system a),允许用户打开某些处理功能。当这些功能激活时,系统A将侦听来自系统B的消息 无论系统A是否在侦听,系统B当前始终将这些消息发送到主题。这些消息的生成和发送成本并不高,但如果系统A不在侦听,我希望避免发送它们。(请注意,这些消息不需要持久,系统A可以在任何时候启动/停止侦听并正常工作。) 我使用ActiveMQ作为消息代理 我可以看到一些可能的解决办法 创建一个注册/订阅消息,系统a将发送给系统B。我不太确定该消息的发送频率,或者双方需要保持何种状态 当没

我有一个系统(我们称之为system a),允许用户打开某些处理功能。当这些功能激活时,系统A将侦听来自系统B的消息

无论系统A是否在侦听,系统B当前始终将这些消息发送到主题。这些消息的生成和发送成本并不高,但如果系统A不在侦听,我希望避免发送它们。(请注意,这些消息不需要持久,系统A可以在任何时候启动/停止侦听并正常工作。)

我使用ActiveMQ作为消息代理

我可以看到一些可能的解决办法

  • 创建一个注册/订阅消息,系统a将发送给系统B。我不太确定该消息的发送频率,或者双方需要保持何种状态

  • 当没有侦听器时,依靠ActiveMQ建议消息来检测

  • 将ActiveMQ调优为在向没有侦听器的队列发送消息时尽可能高效(仍然可能需要生成消息)


  • 我最喜欢#1的想法,但我很难看到如何在不大幅增加复杂性的情况下将其结合起来

    就个人而言,我们采取了将信息放到主题上的方法。特别是当它是一个非持久性主题时,ActiveMQ在没有侦听器的情况下发送时非常有效。另外,使用消息传递中间件的一大好处是发布者和订阅者不必相互了解或维护状态

    但是,如果业务驱动因素使您仍然希望系统A了解消费者,那么有一个JMX调用可用于查看队列或主题上的消费者数量。假设系统A可以进行jmx调用,您可以在MBean对象org.apache.activemq上查询ConsumerCount属性:BrokerName=localhost,Type=Topic,Destination=(替换您自己的BrokerName和Topic name),如果计数大于0,则构造消息并将其放到主题上


    我建议采用这种方法,因为它将所有状态管理放在ActiveMQ上,而System A不必管理任何状态。

    就个人而言,我们采用了将消息放到主题上的方法。特别是当它是一个非持久性主题时,ActiveMQ在没有侦听器的情况下发送时非常有效。另外,使用消息传递中间件的一大好处是发布者和订阅者不必相互了解或维护状态

    但是,如果业务驱动因素使您仍然希望系统A了解消费者,那么有一个JMX调用可用于查看队列或主题上的消费者数量。假设系统A可以进行jmx调用,您可以在MBean对象org.apache.activemq上查询ConsumerCount属性:BrokerName=localhost,Type=Topic,Destination=(替换您自己的BrokerName和Topic name),如果计数大于0,则构造消息并将其放到主题上


    我建议采用这种方法,因为它将所有状态管理都放在ActiveMQ上,并且System A不必管理任何状态。

    咨询消息可以为您提供此类信息,或者您也可以使用AMQ中提供的BrokerStatisticsPlugin,它允许您的客户机发送消息,并让代理向您发送有关其当前状态的各种信息。它还有比JMX更易于使用的优点

    见:

    如果你想要一个真正的经纪人不可知的解决方案,你可能不得不选择1,因为其他的解决方案依赖于AMQ特有的特性

    问候


    Tim www.fusesource.com

    咨询信息可以为您提供此类信息,或者您也可以使用AMQ中提供的BrokerStatistics插件,它允许您的客户发送消息,并让代理向您发送有关其当前状态的各种信息。它还有比JMX更易于使用的优点

    见:

    如果你想要一个真正的经纪人不可知的解决方案,你可能不得不选择1,因为其他的解决方案依赖于AMQ特有的特性

    问候


    Tim www.fusesource.com

    我可能会继续将信息放到主题上,但我觉得我将来会遇到类似的情况,这将不那么容易,我希望构建类似于我在#1中描述的东西。我可能会继续将信息放到主题上,但我觉得在未来我会遇到类似的情况,在那里这将不是那么容易,我将期待建立类似于我在#1中描述的东西。