3

次のことを可能にするオープンソースのキューイングプラットフォームを検討しています: 複数のプロデューサー、複数のコンシューマーが、特定のユースケースでマルチスレッド環境のキューにデータを入れています: コンシューマーが次のことを実行できるようにしたい

  1. キューからのメッセージをピークします (他のコンシューマーが同じメッセージを消費できないように、メッセージをキューで非表示としてマークする必要があります)。
  2. コンシューマーは、消費されたメッセージを処理し、正常に処理できる場合は、メッセージを消費済みとしてマークし、キューから完全に削除する必要があります。
  3. メッセージを消費済みとしてマークした後、コンシューマーが突然終了した場合、または特定のタイムアウト後に消費の成功を確認できなかった場合、別のコンシューマーがそれを取得できるように、メッセージは再びキューに表示されます。

RabbitMQ、hornetQ、ActiveMQ を見てきましたが、この機能をすぐに使えるかどうかわかりません。この機能を提供するシステムに関する推奨事項はありますか?

4

4 に答える 4

2

これは、hornetqが自動確認モードでどのように機能するかです。これは実際には「覗き見」ではありませんが、メッセージはリスナーに配信され、他のリスナーには表示されません。リスナーがトランザクションを完了できなかった場合、それが停止したり、例外をスローしたりするなどの理由で、メッセージはキューに再表示され、別のリスナーに再配信されます。リスナーが正常に完了すると、メッセージはキューから完全に削除されます。

申し訳ありませんが、このスレッドは1年以上前のものであることに気づきました。まあ、多分これは誰かを助けるでしょう...

于 2011-07-22T03:17:20.897 に答える
2

タイムアウトベースの再配信を除いて、RabbitMQ はこれをすぐに実行できます。メッセージが確認されていない間に接続が切断された場合、メッセージはキューの他のコンシューマーに配信するために再キューイングされます。プル モード ("Basic.Get") またはプッシュ モード/サブスクライブ モード ("Basic.Consume") を使用して、サーバーにメッセージをフィードさせることができます。

于 2010-05-03T07:15:02.517 に答える
1

あなたが求めているのは、標準の JMS 動作です。これは、準拠した JMS 実装によってそのまま実装されます。

于 2010-05-02T11:02:46.573 に答える
0

はじめに、CORBA、COM、およびネイティブ ソケットを含む多くのテクノロジを使用して、多くのメッセージ ベースのシステムをゼロから構築および設計したと言えます。

これらの多くで重要なのは、テクノロジーに基づいた設計です。

これを念頭に置いて、おそらくRabbitMQから始めて、必要に応じて強化することを選択します.

多くの点で、 AMQPを理解するのは大変なことですが、時間をかける価値はあります。そうすれば、この作業を行うことができると信じています。

箱から出して正確な機能を得ることができない場合でも、重要な問題は、これを実行できるかどうかです。私はできると信じています。結局のところ、それはオープンソースです。

于 2010-04-30T22:34:35.217 に答える