条件:
1) hibernate トランザクション マネージャーを使用します。2) キューはトランザクションとしてマークされます。3) spring-amqp にバンドルされている SimpleMessageListenerContainer を使用して、メッセージのコンシューマーをトリガーします。
シナリオ :
コンシューマは、ハイバネート トランザクションをロールバックさせ、メッセージを再度キューに入れる原因となる予期しないエラーが原因で例外を生成します。これはコンテナによって処理されます。
SimpleMessageContainer の記述方法が原因で、キューからメッセージを削除してプラットフォーム トランザクション マネージャーをロールバックする方法を見つけることができませんでした。チャネルとトランザクション マネージャーの両方がロールバックするか、操作がパスします。
私が考えたのは、メッセージのフィールドにデータを入力することにより、例外でメッセージを失敗としてマークすることでした。これにより、別のコンシューマーに戻ったときに、AOP アドバイスを使用してメッセージの状態を分析し、メッセージを別のメッセージに再ルーティングできます。両替。
メッセージの本文を変更したり、rabbitmq でメッセージにタグを付けるためにヘッダーを追加したりすることはできないようです。メッセージが戻ってくるたびに、元のメッセージになります。
メッセージにタグを付けるにはどうすればよいですか?
他の人は、トランザクションをロールバックしながら、例外でメッセージの再ルーティングをどのように解決しましたか?