2012-04-11 7 views
1

私は2つの異なるサービスをウェブサーバー上で実行しています。両方のサービスには、以下の引数を持つ 'xyz'という名前の操作があります。ラクダ交換オブジェクトのタイプを決定する方法

サービス1:

Public String xyx(Student object) {}

サービス2:今、私はそれを受け取り、メッセージに基づいて、これらのサービスの1の操作を呼び出すクライアントを

public String xyz(Employee object){}

を持っています。メッセージはラクダ交換として受け取られます。だから私はメッセージの種類を識別し、適切なサービスを呼び出す必要があります。

キャメル交換として受け取ったメッセージの元の種類を特定するにはどうすればよいですか。

ありがとうございました。

+0

印刷するログコンポーネントにヘッダをダンプしない理由でわずか考えをそれらを端末に送信する。たぶんヘッダーには、それらを区別する方法を特定するのに役立つ何かがあります。 – Namphibian

答えて

6

私は、それがどのサービスであるかを示すためにヘッダーに値を設定し、次にこれをラクダルートで送信します。このアプローチは、これを行うための1つの方法です。クリスチャン・シュナイダーにはもう1つの優秀な解決策があります。私はこれまで以上に多くのことをしています。しかし、どちらも同じことを達成し、あなたが誰に尋ねるかによって、あるものが他のものよりもはっきりするかもしれません。あなたが行うことができる。例えば

public void foo(Exchange exchange){ 

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

} 

あなたは、その後のJava DSL、あるいは春のDSLのいずれかに見出しを絞り込むことができます。

あなたはこのような何か(擬似コード)を行うだろう。このような何か(擬似コード)春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(); 

を行うだろうJavaの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。基本的に私が示唆しているのは、より豊かなパターンに従うことです。あなたが私にキャメルにメッセージを送る方法を教えていただけたら、もっと助けてくれるかもしれません。

これはあなたにいくつかのアイデアを提供し、コードミスなどがある場合は申し訳ありませんが私はバス停におり、チェックする時間がありませんでした。

5

)(exchange.getInを試してみてください学生

+0

短くて甘い。私はそれが好きです。 – Namphibian

2

のinstanceof getBody()それとも、このような何か行うことができます。

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(); 
関連する問題