0

キューからメッセージを受信し、それを処理し、処理されたメッセージを別のキューに書き込む Java コードを次のように持っています。

    @RabbitListener(queues = "rawFusion")
    @SendTo("Fusion")
    public String receiverFusion(Object _message) {
        String message = getMessage(_message);
        return messageParser.parse(message);
    }

ここでは、常に「rawFusion」キューからメッセージを取得し、「Fusion」キューに書き込みます。

私がやりたいことは、いくつかの条件に応じて異なるキューにメッセージを書き込むことです。したがって、「RawFusion」キューからメッセージを受信した後、@SendToパラメーターを (または使用せずに)決定したいと思い ます。@SendTo

それを行う方法はありますか?

前もって感謝します

4

2 に答える 2

1

送信者がreplyToメッセージ プロパティ (キュー名またはexchange/routkingKey) を設定すると、コンテナーはそれを使用します。は、メッセージに@SendToない場合にのみ使用されreplyToます。

送信者を変更できない場合、@RabbitListener を使用する場合@SendTo、SpEL 式を含めることができますが、リクエストからのコンテキストがありません。これは、返信をインテリジェントにルーティングする必要があると思われます。

ThreadLocal に何かを保存して使用できます

@SendTo("#{someBean.someMethod()}")

それを取得します。

JIRA の問題を開いて、評価に何らかのコンテキスト (入力引数など) を提供するメカニズムを考え出すことができるかどうかを確認します。

編集

バージョン 1.6 以降、 @SendTo は、実行時に request および reply に対して評価される SpEL 式にすることができます@SendTo("!{'some.reply.queue.with.' + result.queueName}")

于 2016-02-23T17:39:32.923 に答える
0

残念ながら、送信者のメッセージを変更することはできません。この場合、SpEL 式では問題が解決しないようです。しかし、回避策を見つけました。それが良い習慣かどうかはわかりませんが、今のところ私の問題は解決しています。

私は@SendTo("exchange/")ルーティングキーを使用しませんでした。私のメッセージでは、「destination=testQueue」のようなヘッダー値を設定し、宛先値に応じてメッセージをルーティングするヘッダー交換を作成しました。

@SendToご回答ありがとうございます。メッセージを受け取った後に価値を判断できるメカニズムがあれば幸いです。

于 2016-02-23T23:42:54.023 に答える