2016-11-15 2 views
0

問題:プロセスメッセージが順次競合する消費者と

  • 私はさらに追加するにはキュー
  • に消費者を競争している特定の順序(FIFO)
  • でキューのメッセージを(注文を言う)を受信します(バージョン1、バージョン2、バージョン5と言う)
  • オーダーのバージョン番号はオーダーで利用可能ですが、オーダーのバージョン番号はオーダーに使用できません私のリスナーは興味がないかもしれませんすべてのバージョン(コンシューマーはバージョンのみに興味があるかもしれません。バージョン1、バージョン2、バージョン5と答えてください)

私が受け取った順番で消費者全体のメッセージを処理する方法を教えてください。

答えて

0

複数のコンシューマを使用することはできません。基本JMSは使用できません。あなたはロジックを提供する必要があります。

私が考えている解決策は、非同期統合の美しさと同期を図るためです。バージョンが添付されている「オブジェクト」または「メッセージ」または「タイプ」ごとに、受け取ったバージョンを追跡して、それらが順番に処理されることを保証することができます。コンシューマがそれらを順不同で受け取った場合、コンシューマはそのトラックで停止するか、メッセージを再キューに入れることができますが、どちらの解決策にも不快感があります。

バージョンが変更されたオブジェクトの有限集合が複数存在する場合は、メッセージセレクタを使用して、特定のコンシューマが特定のIDのメッセージを見る唯一のものであることを確認できます。

JMSプロバイダが優先キューをサポートしている場合は、異なる優先順位を割り当てることができ、これにより適切な順序でキューに入れられますが、競合条件が付いているように見えます。

もう一度質問します。正しい技術を使用していますか?

+0

返信いただきありがとうございます。私は、処理されているバージョンを識別するために分散ストレージを持っていると思っていましたが、最初のイベントを識別するためにはうまくいきません。 (リスナー1とバージョン2がリスナー2によって処理されているバージョン1が処理されていることを想像してください。両方を参照すると、レコードが見つからない可能性があります。我々の場合、有限集合でもない。我々は、FIFOと保証された配信と他のフェールオーバーメカニズムのためのキューが必要です。考えられる他の技術に関するあなたの考えを聞きたいと思うかもしれません。 – user7161330

+0

単一の消費者を介してシリアライズする以外に、解決策がないかどうか、状態を判断できない場合(つまり、v2が最初ではないかもしれない処理するイベント、チェックする方法はありません)、実行可能な解決策があるかどうかはわかりません。コード化しようとする前に、あなたがまとめなければならない状態図があります.... –