2016-11-01 23 views
0

IBM MQからメッセージを読み取るシステムがあります。このキューから、ときどきデータが破損することがあります。メッセージが次に読み込まれたときに失敗した場合、リスナーは5分待ってから処理を進めます。メッセージが3回失敗すると、メッセージはバックオフキューに入れられます。 JMSContainerFacotryは、パラレルでmax 10を実行するように設定されています。つまり、大量の破損メッセージを受け取った場合、これらのメッセージはバックオフキューに到達するまでに10分以上かかることになりますが、すべてのスレッドを消費するため、すべての破損メッセージがすべてのスレッドに届くまで待たなければなりません。処理前のバックオフキュー。リスナーからwait()を削除してスレッドがブロックしないようにしたいが、失敗したメッセージはポップアップする前に5分待つ。メッセージ再配信ibm mq

ActiveMQでは、同じメッセージを再びポップする前にキューに5分待つように指示できます.IBM MQではその可能性はありません。失敗したメッセージをキューに戻すことは可能ですか?今は失敗したメッセージが新しいメッセージの前に出現するようです。または、失敗したメッセージのjmspriorityを低く設定します。だから、まだ失敗したメッセージがあれば、失敗したメッセージの前にキューからポップされるでしょうか?

私のリスナーがそんなにある:キュー内

@JMSListener() 
public void listen(Object message) { 
TextMessage textMessage = (TextMessage) message; 

if (textMessage.getIntProperty("JMSXDeliveryCount") > 1) { 
//pause for 5 minutes 
} 

//buisness logic 

} 

ザ・はIBM MQです。 ASはJboss 6です。

答えて

0

毒メッセージが表示された場合、なぜ5分間停止するのかはわかりません。あなたがそれが悪いと知っているなら、なぜそれを捨てるのか、それとも後の調査のためにバックアウト・キューにそれを渡すのではないのですか? JMS有害メッセージの処理を参照してください。

http://www.ibm.com/support/knowledgecenter/SSFKSJ_9.0.0/com.ibm.mq.dev.doc/q032280_.htm

に関する詳細は、なぜそんなに多くの「悪い」メッセージを得ていますか?

+0

私たちは他の多くのアプリケーションと話しているので、再配備するとエラーが発生し、後で試してみます。 私たちは多くの悪いメッセージを受け取ることはありませんが、数回重複したメッセージを受信しました。 idはすでにデータベースに存在しているため、これらはすべて失敗します。 – user1764597

+0

しかし、単に「悪い」メッセージをうまく処理して、次のメッセージを消費するのはなぜですか? –

0

私はActiveMQのでは、IBM MQと私はその 可能性を持っていけない、再び同じメッセージが飛び出る前に5分 を待つためにキューを伝えることができることを知っています。

試行間の再試行間隔のオプションは、クライアントとして動作しているため、MDBリスナー側で設定する必要があります。しかし、WMQ側ではありません。

失敗したメッセージをキューに戻すことは可能ですか?

メッセージをキューに戻すか、有毒なメッセージを同じキューの最後に配置したかったのですか? 私たちは、同じキューの最後に毒メッセージを移動することはできません

有毒メッセージを処理するための唯一の3つのオプションがあります。

  1. 置きバックキュー
  2. 再上のメッセージがメッセージをBOQまたはDLQのいずれかにルーティングしてください。
  3. パージするか、永久に廃棄してください。
関連する問題