2017-06-26 47 views
0

我目前使用Apache ActiveMQ作为JMS解决方案来在客户端之间来回发送各种消息。我想检查特定客户(即消费者或生产商)的正常运行时间,但我还没有找到一种方法来做到这一点。我已经检查了咨询消息和StatisticsPlugin以了解如何执行此操作的任何信息,但没有发现任何帮助。ActiveMQ(Java) - 检查连接活动的时间(即消费者或生产者)

我可以尝试在我的Consumer和Producer类中嵌入一个时钟,并创建一个特殊的咨询目标来发送消息以从这些类中检索时间;然而,这似乎不切实际。

有没有人知道更好的解决方案或在ActiveMQ中做到这一点的方法?

回答

0

为什么咨询不是解决方案? 您可以通过将消息从主题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&amp;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> 
+0

从咨询的话题将消息发送到队列是不是我有问题,它能够得到正常运行时间。我将如何做到这一点?是否有某种功能我错过了,或者我应该使用另一种方法?编辑:我还应该提到,我不使用XML,只有Java。 –

+0

每次连接开始或停止时,都会向主题ActiveMQ.Advisory.Connection发送一条消息,其中包含信息。因为如果你的客户计算正常运行时间没有连接,那么他就会丢失这些信息,因此我建议你将它们发送到队列中以便稍后处理。所以如果你计算启动消息的时间和停止消息之间的差异,你有正常运行时间没有?您使用嵌入式ActiveMQ?您可以通过编程方式创建Camel路径或嵌入java listener –

+0

这是一个好主意,但问题在于即使在我的“咨询”程序处于脱机状态时,我也要计算正常运行时间。用户将能够连接和发送消息。任何一段时间后,我都可以检查连接的正常运行时间,而不必让程序打开以接收最初的连接信息消息。尽管我发现如何使它准确工作,并且不需要打开额外的连接来管理咨询消息,以及消费者和生产者已经订阅的任何主题或队列,但我仍然坚持使用时钟想法。 –