ActiveMQ(Java) - 检查连接活动的时间(即消费者或生产者)
问题描述:
我目前使用Apache ActiveMQ作为JMS解决方案来在客户端之间来回发送各种消息。我想检查特定客户(即消费者或生产商)的正常运行时间,但我还没有找到一种方法来做到这一点。我已经检查了咨询消息和StatisticsPlugin以了解如何执行此操作的任何信息,但没有发现任何帮助。ActiveMQ(Java) - 检查连接活动的时间(即消费者或生产者)
我可以尝试在我的Consumer和Producer类中嵌入一个时钟,并创建一个特殊的咨询目标来发送消息以从这些类中检索时间;然而,这似乎不切实际。
有没有人知道更好的解决方案或在ActiveMQ中做到这一点的方法?
答
为什么咨询不是解决方案? 您可以通过将消息从主题ActiveMQ.Advisory.Connection路由到队列以便在需要时处理它们并计算正常运行时间来使用。
这个片段添加到您的activemq.xml中
...
</broker>
<!-- configure the camel activemq component to use the current broker -->
<bean id="ActiveMQVMConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="vm://localhost?create=false&waitForStart=10000"/>
<property name="userName" value="${activemq.username}"/>
<property name="password" value="${activemq.password}"/>
</bean>
<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent" >
<property name="connectionFactory" ref="ActiveMQVMConnectionFactory"/>
</bean>
<camelContext id="camel" trace="false" xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="activemq:topic:ActiveMQ.Advisory.Connection" />
<to uri="activemq:queue:Advisory"/>
</route>
</camelContext>
从咨询的话题将消息发送到队列是不是我有问题,它能够得到正常运行时间。我将如何做到这一点?是否有某种功能我错过了,或者我应该使用另一种方法?编辑:我还应该提到,我不使用XML,只有Java。 –
每次连接开始或停止时,都会向主题ActiveMQ.Advisory.Connection发送一条消息,其中包含信息。因为如果你的客户计算正常运行时间没有连接,那么他就会丢失这些信息,因此我建议你将它们发送到队列中以便稍后处理。所以如果你计算启动消息的时间和停止消息之间的差异,你有正常运行时间没有?您使用嵌入式ActiveMQ?您可以通过编程方式创建Camel路径或嵌入java listener –
这是一个好主意,但问题在于即使在我的“咨询”程序处于脱机状态时,我也要计算正常运行时间。用户将能够连接和发送消息。任何一段时间后,我都可以检查连接的正常运行时间,而不必让程序打开以接收最初的连接信息消息。尽管我发现如何使它准确工作,并且不需要打开额外的连接来管理咨询消息,以及消费者和生产者已经订阅的任何主题或队列,但我仍然坚持使用时钟想法。 –