4

私のプログラムには、トピックを介して通信するパブリッシャーとサブスクライバーの 2 つのモジュールがあります。

サブスクライバーがメッセージを受信するには、パブリッシャーより前に開始する必要があることを理解しています。ただし、何らかの理由でサブスクライバーがダウンし、再起動が必要になるシナリオが発生する場合があります。パブリッシャーの後にサブスクライバーを開始すると、メッセージを受信できるようにする方法はありますか?

4

3 に答える 3

2

春の DMLC と永続的なサブスクライバーを使用してコード例を追加します。テンプレートからセッションを取得し、永続的なコンシューマーを自分で作成する必要があるため、プレーンな JMSTemplate (これにタグを付けたので、JMS テンプレートを使用して受信していると思いますか?) でこれを実現するのは困難です。DMLC アプローチを使用する場合、これは自動的に処理されます。

<bean id="myDurableConsumer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
 <property name="connectionFactory" ref="myCf" />
 <property name="sessionTransacted" value="true" />
 <property name="subscriptionDurable" value="true"/>
 <property name="durableSubscriberName" value="myDurableNameThatIsUniqueForThisInstance" />
 <property name="destinationName" value="someTopic" />
 <property name="messageListener" ref="myListener" />
< /bean>
于 2012-10-22T10:21:14.357 に答える
1

切断と再接続のシナリオのみに関心がある場合は、永続的なサブスクライバーが探しているものだと思います。

http://activemq.apache.org/how-do-durable-queues-and-topics-work.html

于 2012-10-22T06:27:48.910 に答える
1

一般に、サブスクライバーがオフラインになり、メッセージを見逃さずに戻ることを考慮したい場合は、JMS 永続サブスクリプションを使用します。これにより、サブスクライバーは、オフライン中に見逃したメッセージを受信できます。ここでの注意点は、オフライン メッセージの収集を開始する前に、最初に 1 回サブスクライブする必要があることです。

標準の JMS 耐久性コンシューマ モデルに加えて、ActiveMQ は遡及コンシューマも提供します。もう 1 つの可能性は、仮想宛先です。

于 2012-10-22T10:13:20.363 に答える