1

SimpleMessageListenerContainer複数のキューに接続され、 で設定された を使用しますChannelAwareMessageListener。メッセージが消費されたキューを特定することはできますか? 特に、メッセージが Exchange からキューにルーティングされた場合。

メッセージがキュー名を含むキューに直接送信されMessageProperties#getReceivedRoutingKeyた場合、メッセージが Exchange 経由でキューにルーティングされた場合、この情報には使用されたルーティング キーが含まれているようです。

メッセージがキューにどのように配信されたかに関係なく、この情報を正しく抽出できるメカニズムを探しています。または、RabbitMQ 側でこの情報を含むヘッダーを使用して情報を強化するメカニズム。

4

1 に答える 1

3

キュー名を slf4j MDC コンテキストに追加したいという同様の問題がありました。

私が見つけた唯一の解決策はSimpleMessageListenerContainer、キュー名または私の場合は MDC コンテキスト (基本的にスレッドローカル) の ThreadLocal 変数をサブクラス化して設定することです。

SimpleMessageListenerContainerまだ正確にどのキューがわからないため(複数のキューをコンテナーにバインドできます)、コンテナーごとに 1 つのキューのみを許可する必要があります。

私の会社独自のコード ベースには、ルーティング アノテーションに基づいてSimpleMessageListenerContainerFactoryカスタムを作成する魔法があります (amqp の spring mvcを考えてください)。関心があれば、オープンソース化を早めることができるかもしれません。SimpleMessageListenerContainer@RequestMapping

于 2014-06-11T17:29:15.723 に答える