2

私は今、この問題に多くの時間を費やしていますが、最終的な解決策を見つけることができないようです. ブロードキャスターとして機能するメッセージ プロデューサーがあり、2 つの異なるトピックにメッセージを投稿します。サイト運営者の投稿プロセスは次のフローに従います。

  • ファクトリへの接続を作成して起動します。
  • セッションの作成
  • セッションと特定のトピック名を使用して Message Producer を作成する
  • n* 件のメッセージを送信中
  • n 秒待機
  • プロデューサー、セッション、接続を閉じています

次に、次の構成を使用して 3 つのコンシューマーをこれらのトピックにサブスクライブさせます (各コンシューマーには独自のclientIdとがありdurableSubscriptionNameます)。

<route id="consumerOneRoute">
    <from uri="activemq:topic:topicName?clientId=consumerOneId&durableSubscriptionName=ConsumerOneName" />
    <bean ref="consumerBean" method="processMessage" />
</route>

実際のところ、私の消費者は常にメッセージを受け取っているわけではありません。少なくともすべてではありません。2 つのコンシューマーがすべてのメッセージを取得し、3 番目のコンシューマーがメッセージをまったく取得しない場合もあれば、ランダムなコンシューマーがランダムな数のメッセージを受信する場合もあります。 、消費者は不足しているメッセージを受け取りますが、ブローカーの最初の存続期間中になぜそれが起こらないのか本当に理解できません。誰かがとても親切で、私を助けようとしますか?

ありがとう、ジョージ。

PS : 仮想トピックの使用を考えていましたが、私の主な目的は、他のコンシューマーが将来アタッチできるブロードキャスト プロデューサーを用意することなので、別の仮想ブランチを追加して毎回プロデューサーを変更する必要はありません。メイントピックへ。

4

4 に答える 4

0

機能する唯一の解決策は、永続的なコンシューマーを使用するトピックから仮想トピックに切り替えることでした。

于 2014-06-12T10:57:22.047 に答える