私は Spring JMS にかなり慣れていないので、Spring サイトや他の場所で多くのドキュメントと例を見つけましたが、私の使用例はどこにも説明されていないようです。少なくとも、私が理解できる方法では説明されていません。お役に立てれば幸いです。
トピックのパブリッシャーと、そのトピックに対するいくつかの永続的なサブスクライバーを作成したいと考えています。私は現在、最初のサブスクライバーに取り組んでおり、1 時間ごとに (タイマーで) 実行し、メッセージのトピックを排出して一度にすべて処理する (つまり、すべてのメッセージを要約した電子メールを送信する) ことを目的としています。
これは簡単だと思いますが、Spring でこのセットアップを構成する方法がわかりません。アドバイスは大変参考になります。
私の計画は、タイマーが「processBatch」メソッドを呼び出し、タイムアウトになるまでループで receiveAndConvert() を呼び出し、メッセージのリストを作成することでした。
ただし、消費者は実際にはトピックにサブスクライブしていないため、これはうまくいかないようです。確かに、実行前ではなく、実行後でもない可能性があります。
Spring および/またはダイレクト ActiveMQ を使用してこれを構成するにはどうすればよいですか?
XML をどこで作成したかは、このディスカッションを開始するのに役立つ場所かどうかはわかりませんが、役立つ場合に備えて提供します。
<beans>
<!-- some unrelated beans -->
<!-- my Active MQ connection factory -->
<bean id="mqConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">
<property name="connectionFactory">
<bean class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="vm://broker"/>
</bean>
</property>
</bean>
<!-- my topic -->
<amq:topic id="completionsTopic" physicalName="completions.topic"/>
<!-- my subscriber -->
<bean id="emailer" class="com.j128.Emailer">
<property name="jmsTemplate">
<bean class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="mqConnectionFactory"/>
<property name="defaultDestination" ref="completionsTopic"/>
<property name="receiveTimeout" value="2000"/>
</bean>
</property>
</bean>
<!-- my scheduler and periodic call to the topic drainer -->
<task:scheduler id="taskScheduler" pool-size="10"/>
<task:scheduled-tasks>
<!-- send emails hourly -->
<task:scheduled ref="emailer" method="processBatch" cron="0 * * * *"/>
</task:scheduled-tasks>
</beans>
しかし、私は根本的に間違った戦略を持っていると確信しており、これを構成する簡単な方法があると確信しています。
ご協力いただきありがとうございます。