2

条件:

1) hibernate トランザクション マネージャーを使用します。2) キューはトランザクションとしてマークされます。3) spring-amqp にバンドルされている SimpleMessageListenerContainer を使用して、メッセージのコンシューマーをトリガーします。

シナリオ :

コンシューマは、ハイバネート トランザクションをロールバックさせ、メッセージを再度キューに入れる原因となる予期しないエラーが原因で例外を生成します。これはコンテナによって処理されます。

SimpleMessageContainer の記述方法が原因で、キューからメッセージを削除してプラットフォーム トランザクション マネージャーをロールバックする方法を見つけることができませんでした。チャネルとトランザクション マネージャーの両方がロールバックするか、操作がパスします。

私が考えたのは、メッセージのフィールドにデータを入力することにより、例外でメッセージを失敗としてマークすることでした。これにより、別のコンシューマーに戻ったときに、AOP アドバイスを使用してメッセージの状態を分析し、メッセージを別のメッセージに再ルーティングできます。両替。

メッセージの本文を変更したり、rabbitmq でメッセージにタグを付けるためにヘッダーを追加したりすることはできないようです。メッセージが戻ってくるたびに、元のメッセージになります。

メッセージにタグを付けるにはどうすればよいですか?

他の人は、トランザクションをロールバックしながら、例外でメッセージの再ルーティングをどのように解決しましたか?

4

1 に答える 1

0

「x-dead-letter-exchange」という名前のキュー引数があり、メッセージが拒否または期限切れになった場合にメッセージが再発行される交換を指定するために使用されます。

于 2013-03-27T18:05:23.840 に答える