4

アクティブな mq で spring-jms を使用しています。

ErrorHandlerjms メッセージの配信が失敗するたびにコールバックを受信するリスナーをセットアップしました。つまり、メッセージを処理するメソッドは、正常に戻る代わりに例外をスローします。

ただし、私の jms は、jms 配信が最終的に成功するまで数回再試行するように構成されています。そして、私のコールバックにはすべての失敗が通知されます。

私が欲しいのは、すべての再試行が最終的に失敗した場合にのみ通知を受け取るリスナーです。動機は、管理者の注意を引くために問題を提起することです。しかし、管理コンソールに誤った通知が表示されるのは望ましくありません。

<bean abstract="true" id="abstractDestinationListener"
    class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="connectionFactory" ref="jmsFactory" />
    <property name="errorHandler" ref="destinationErrorHandler"/>
    <property name="sessionTransacted" value="true"/>
</bean>
4

2 に答える 2

2

問題の宛先に対して、宛先ごとの配信不能キュー ( individualDeadLetterStrategy- https://activemq.apache.org/message-redelivery-and-dlq-handling.html ) を使用することを検討してください。最大再配信回数に達すると、メッセージは DLQ に移動されます。次に、管理者に電子メールを送信するリスナーを使用して、そのキューにコンシューマーを設定できます。

別の方法として、リスナーを try-catch でラップし、例外が発生した場合にのみ例外を再スローし、message.getIntProperty("JMSXDeliveryCount") < MAX_REDELIVERY_COUNTそれ以外の場合は管理者にメールを送信することもできます。ただし、このオプションは、再配信制限を 2 つの場所 (ブローカー構成とコード) に設定することを意味します。

于 2013-03-04T14:41:09.467 に答える
0

JMS メッセージング/処理を使用した、よりきめ細かい制御/柔軟性/ルーティングが必要な場合は、Apache Camel のエラー処理を使用する必要があります...

于 2013-03-04T22:56:01.633 に答える