2

私はrabbitmqが初めてで、次のシナリオを試しています

--> プロデューサーがメッセージを送信
--> コンシューマーがメッセージを受信
-- 独自のロジックを実行

ロジックが失敗した場合 - 再キューイング

--> コンシューマーが失敗した場合 (マシンがダウンした場合)、メッセージを再キューイングします。

Spring rabbitTemplate を使用して基本的な送信者を実装しました

rabbitTemplate.convertAndSend(.....);

そして消費者のために私はメッセージリスナーを実装しました

public class CustomMessageListener implements MessageListener {
@Override
    public void onMessage(Message message) {
       //** my own logic**
   }
}

春を通してコンテナに追加しました

  <bean id="aListener" class="com.sample.CustomMessageListener" autowire="byName"/>

 <rabbit:listener-container id="myListenerContainer" connection-factory="connectionFactory"  acknowledge="auto" prefetch="750" concurrency="5" >
    <rabbit:listener ref="aListener" queues="reportQueue"/>
</rabbit:listener-container>

この部分までは正常に動作しています。

リスナーで言及されている**自分のロジック**が失敗した場合。メッセージを再キューイングしたい。どうすればこれを実装できますか。私が経験したブログから、returnedMessage をオーバーライドする必要があるようです。しかし、リスナーを介してそれを行う方法がわかりません。

4

1 に答える 1

4

を使用acknowledge="auto"すると、リスナーが正常に終了するまでメッセージは確認されないため、何もする必要はありません。リスナーが例外をスローするか、サーバーがクラッシュした場合、メッセージはキューに残ります。

于 2015-07-08T12:40:57.430 に答える