2017-06-26 88 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

這是一個好主意,但問題在於即使在我的「諮詢」程序處於脫機狀態時,我也要計算正常運行時間。用戶將能夠連接和發送消息。任何一段時間後,我都可以檢查連接的正常運行時間,而不必讓程序打開以接收最初的連接信息消息。儘管我發現如何使它準確工作,並且不需要打開額外的連接來管理諮詢消息,以及消費者和生產者已經訂閱的任何主題或隊列,但我仍然堅持使用時鐘想法。 –