0

DefaultMessageListenerContainerを使用して、トピックからのメッセージを消費しています(ブローカーはActiveMQです)。コンシューマーは実行時に作成されるため、次のことを行っています。

1)春に設定されたConainerテンプレートがあります

<bean id="topiccontainertemplate" class="org.springframework.jms.listener.DefaultMessageListenerContainer" scope="prototype" destroy-method="stop">
    <property name="connectionFactory" ref="connectionfactory" />
    <property name="pubSubDomain" value="true" />
    <property name="cacheLevelName" value="CACHE_CONSUMER" />
    <property name="destinationName" value="default" />
</bean>

2)新しいコンシューマーが必要な場合は、アプリケーションconextから新しいコンシューマーを取得し、destinationNameを再構成します。

DefaultMessageListenerContainer container = context.getBean("topiccontainertemplate", DefaultMessageListenerContainer.class);
container.setDestinationName(localEntity.getId().getDestination());
container.setMessageListener(getListener());
container.start();

残念ながら、コンテナはトピックに関するいくつかのメッセージを見逃しています。誰かが私が間違っていることを知っていますか?

4

2 に答える 2

2

サブスクリプションは永続的に見えません。もしそうなら、あなたの潜水艦がオフライン/起動している間にメッセージが保存されていたでしょう。サブスクライバーは、完全に開始された時点からメッセージを取得します。それ以前に送信されたメッセージは失われます。

于 2012-06-02T15:03:29.457 に答える
1

さらにいくつかのテストを行った後、消費者の作成中に競合状態が見つかりました。メッセージは失われず、コード内で適切に配布されませんでした。

于 2012-06-04T15:41:25.350 に答える