2012-04-11 67 views
1

我有兩個不同的服務在Web服務器上運行。這兩個服務都有一個名爲'xyz'的操作,並帶有以下參數。如何確定駱駝交換對象的類型

服務1:

Public String xyx(Student object) {}

服務2:

public String xyz(Employee object){}

現在我有一個客戶端,它會調用基於它接收到的消息,這些服務中的一個的操作。該消息將作爲駱駝交換接收。所以我需要確定消息的類型,然後調用相應的服務。

我如何識別作爲駱駝交換接收的消息的原始類型。

謝謝。

+0

只是一個想法的,爲什麼不傾頭的日誌組件,它將打印他們到碼頭。也許頭文件中有些東西可以幫助您確定如何區分它們。 – Namphibian 2012-04-11 05:44:10

回答

6

我會在頭文件中設置一個值來指示它是哪個服務,然後在駱駝路由上發送這個值。這種方法只是這樣做的一種方式。 Christian Schneider有另一個很好的解決方案,我現在可能會使用更多的解決方案,因爲我現在已經更多地使用了駱駝。但是,兩者都會達到同樣的效果,並且取決於你問的人可能比其他人更清楚。

例如,你可以這樣做:

public void foo(Exchange exchange){ 

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

} 

然後,您可以在任何在Java DSL,甚至春季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豐富模式。基本上我建議遵循豐富的模式。如果你能告訴我你是怎麼給駱駝發送消息的,那麼我可能會幫助更多。

希望這給你一些想法,如果在代碼中有語法錯誤等,抱歉,我在公交車站,沒有時間檢查它。 。

5

嘗試exchange.getIn()getBody()的instanceof學生

+0

簡短而甜美。我喜歡。 – Namphibian 2012-04-12 06:33:04

2

或者你也可以做這樣的事情:

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();