2017-02-03 6 views
0

2台の異なるマシン(N1とS1)で同じBWアプリケーションをホストしています。これらのアプリケーションはメッセージをキューに送信します。現在、このキューのレシーバは、2つの異なるマシン(N2とS2)でホストされているBEサービスです。TIBCO EMS:複数の受信者の場合の優先度の設定

N2とS2の両方がアクティブのときにN1からのメッセージを選択する必要があり、N2がダウンしているときだけS2によってピックする必要があります。 N2とS2の両方がアクティブである場合、S1から来る同じ方法のメッセージはS2によって選択されるべきであり、S2がダウンしているときだけN2によって選択されるべきである。

私はこれをどのように達成することができますか教えてください。

答えて

0

N1とS1のBWアプリケーションからのメッセージにカスタムJMSヘッダーを設定して、メッセージの送信元となるBWアプリケーションを指定します。

BEサービスでは、このヘッダーメッセージを読み取って、他のBEサービスがクラスタ内で実行されている(クラスタ化されていると仮定している)かどうかを確認できます。 N2で例えば

は、サービス 擬似コードBE:

if (custom_jms_header_value = "N1") { 
// process 
} 
else if (custom_jms_header_value = "S1" and cluster_check_S2) { 
// S2 is down so process the message 
} 

とサービス

if (custom_jms_header_value = "S1") { 
// process 
} 
else if (custom_jms_header_value = "N1" and cluster_check_N2) { 
// N2 is down so process the message 
} 
+0

BE S2に逆あなたは、実装を詳しく説明していただけますか? メッセージセレクタで条件を指定することはできないため、このコードはどこで記述しますか?また、私のメッセージがN2 BEによって選択され、両方の条件が偽である場合、メッセージはどのようにS2 BEに送られますか? –

+0

いいえ私はJMSメッセージセレクタを使用しているわけではありません。私は、カスタムJMSヘッダーを設定し、そのBWエンジンからそのBWエンジン(N1またはS1)を知り、N2またはS2のBEコードで処理するかどうかを決定するために、そのJMSヘッダーをBEコードで読み取ります。このコードは、おそらくプリプロセッサ内のBEコードに書き込まれると予想されます。 N2 BEがメッセージを受け取った場合、JMSヘッダー値を読み取り、値がN1であれば処理し、S1と表示されている場合はS2 BEエンジンが有効かどうかを確認します。 S2 BEエンジンが作動中の場合は処理しませんが、S2 BEエンジンが作動していなければ処理します。 –

+0

N2とS2の両方がアクティブであり、メッセージ形式S1がN2によって選択されたと仮定します。この場合、私のN2は、S2によって選択されるようにメッセージを処理しない。しかし、メッセージはすでにN2で消費されているため(処理されていなくても)、S2のメッセージはどのように利用できますか? –

関連する問題