1

Web サーバーで 2 つの異なるサービスを実行しています。両方のサービスには、次の引数を持つ「xyz」という名前の操作があります。

サービス 1:

Public String xyx(Student object) {}

サービス 2:

public String xyz(Employee object){}

これで、受信したメッセージに基づいてこれらのサービスのいずれかの操作を呼び出すクライアントができました。メッセージはラクダ交換として受信されます。したがって、メッセージのタイプを識別してから、適切なサービスを呼び出す必要があります。

ラクダ交換として受信したメッセージの元のタイプを特定するにはどうすればよいですか。

ありがとう。

4

4 に答える 4

7

または、次のようなこともできます。

from("foo:incommingroute")
    .choice()
        .when(simple("${body} is 'java.lang.String'"))
            .to("webservice:Student")
        .when(simple("${body} is 'foo.bar.Employee'"))
            .to("webservice:Employee")
        .otherwise()
            .to("jms:Deadletter")
        .end();
于 2016-03-31T18:25:56.370 に答える
6

ヘッダーに値を設定して、それがどのサービスであるかを示し、これをキャメル ルートで送信します。このアプローチは、これを行うための 1 つの方法にすぎません。Christian Schneider は別の優れたソリューションを提供しており、これまで以上に Camel に慣れてきたので、おそらくもっと多く使用することになるでしょう。ただし、どちらも同じことを達成し、誰に尋ねるかによって、一方が他方よりも明確になる場合があります。

たとえば、次のことができます。

public void foo(Exchange exchange){

 exchange.getIn().setHeader("MsgType", "Student");

}

次に、Java DSL または spring DSL のいずれかでヘッダーをフィルタリングできます。

Java DSL では、次のようなことを行います (疑似コード)

from("foo:incommingroute")
.choice()
.when(header("MsgType").equals("Student"))
    .to("webservice:Student")
.when(header("MsgType").equals("Employee"))
    .to("webservice:Employee")
.otherwise()
    .to("jms:Deadletter")
.end();

Spring DSL では、次のようなことを行います (疑似コード)

<route>
 <from uri="foo:incommingroute"/>
   <choice>
     <when>
       <simple>${header.MsgType} equals 'Student'</simple>
       <to uri="webservice:Student"/>
    </when>
    <when>
      <simple>${header.MsgType} equals 'Employee'</simple>
      <to uri="webservice:Employee"/>
   </when>
   <otherwise>
      <to uri="jms:badOrders"/>
   <stop/>
 </otherwise>
 </choice>
 <to uri="jms:Deadletter"/>
</route>

このリンクhttp://camel.apache.org/content-enricher.htmlでエンリッチャー パターンを確認することもできます。基本的に私が提案しているのは、エンリッチャー パターンに従うことです。どのように Camel にメッセージを送信しているか教えていただければ、もっとお役に立てるかもしれません。

これがあなたにいくつかのアイデアを与えることを願っています.コードに構文ミスなどがある場合は申し訳ありませんが、私はバス停にいて、それをチェックする時間がありませんでした.

于 2012-04-11T13:46:07.657 に答える
6

exchange.getIn().getBody() instanceof Student を試してください

于 2012-04-12T05:47:00.673 に答える