0

Web リクエスト、http リクエスト、soap リクエスト、または他のチャネルなど、さまざまな方法でリクエストを送信するクライアントがあります。

Camel では、それぞれのエンドポイントから jms キューに受信します。キュー プロセッサからメッセージを取得します。ここで、プロセッサは、クライアントの好み (着信要求で送信したもの) に基づいて、確認をクライアントに送信する必要があります。

http://camel.apache.org/request-reply.htmlビットで実行できると思いますが、どうにかして先に進むことができません。基本的に、CAMEL の組み込み機能を使用して、プロセッサからそれぞれのクライアントへの確認応答を処理する方法がわかりません。どんな方向でも助けになりますか?

更新:-クライアントの設定は、クライアントからの着信要求メッセージに格納されます。システムのどこかに保存されていると想定することもできます(dbまたはプロパティファイル)

4

1 に答える 1

1

あなたが説明しているのはリターンアドレスのパターンだと思います - https://camel.apache.org/return-address.html

ここのjunitテストケースにいくつかのサンプルコードがあります - http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/ JmsInOnlyWithReplyToAsHeaderTest.java?view=マークアップ

編集:上記のリンクからいくつかのサンプルコードを追加して、よりよく説明します:

from("direct:start")したがって、以下で定義された次のエンドポイントがあると from("activemq:queue:foo")し ましょう。 from("activemq:queue:bar?disableReplyTo=true")

実際のテストでは、このコードを次のように呼び出します。

template.sendBodyAndHeader("direct:start", "World", "JMSReplyTo", "queue:bar");

direct:startこれにより、「World」を含む本文とJMSReplyTo値「queue:bar」で呼び出されるヘッダーを含むメッセージがエンドポイントに送信されます。このJMSReplyToヘッダーを指定したため、ルートが終了すると、ヘッダー値で定義されているエンドポイントが呼び出されます。この場合、「queue:bar」エンドポイントが呼び出されます。

@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
    @Override
    public void configure() throws Exception {
        from("direct:start")
            // must enable preserveMessageQos to force Camel to use the JMSReplyTo header
            .to("activemq:queue:foo?preserveMessageQos=true")
            .to("mock:done");

        from("activemq:queue:foo")
            .to("log:foo?showAll=true", "mock:foo")
            .transform(body().prepend("Bye "));

        // we should disable reply to to avoid sending the message back to our self
        // after we have consumed it
        from("activemq:queue:bar?disableReplyTo=true")
            .to("log:bar?showAll=true", "mock:bar");
    }
};
}

では、これはあなたのユースケースにどのように適合しますか? さて、何が起こるかはクライアントです。または、作成したコードによってJMSReplyTo、応答の送信方法に関連するエンドポイントを含むヘッダーが指定されます。したがって、応答をキューに配置する場合、JMSReplyToヘッダーの値は指定されたキューのエンドポイントになります。

于 2014-04-11T14:37:52.197 に答える