なぜアドバイザリは解決策ではありませんか? トピック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を使用していますか?プログラムでキャメルルートを作成するか、またはJavaリスナーを埋め込むことができます。 –
これは良い考えですが、問題は「アドバイザリ」プログラムがオフラインであっても稼働時間を計算することです。ユーザーはメッセージを送受信できます。何時でも、最初の接続情報メッセージを受け取るためにプログラムを開いたままにしなくても、接続の稼働時間を確認できます。私は時計のアイデアにこだわりたいと思います。それは、消費者とプロデューサーがすでに購読しているトピックやキューと同様に、アドバイザリメッセージを管理する余分な接続を開かなくても、正確に動作させる方法を見つけ出したからです。 –