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です。
私たちは他の多くのアプリケーションと話しているので、再配備するとエラーが発生し、後で試してみます。 私たちは多くの悪いメッセージを受け取ることはありませんが、数回重複したメッセージを受信しました。 idはすでにデータベースに存在しているため、これらはすべて失敗します。 – user1764597
しかし、単に「悪い」メッセージをうまく処理して、次のメッセージを消費するのはなぜですか? –