2012-11-16 62 views
0

我希望有人可以解釋更多關於如何配置駱駝編組和解組數據。我有一個路由調用一個bean來確定一個recipientList。這是基於消息的內容(protobuf)。駱駝路線內重新編組protobuf

路由的配置是這樣的: -

<route id="Splitter"> 
     <from uri="activemq:notification.splitter" /> 
     <unmarshal ref="notificationProto" /> 
     <recipientList> 
      <method bean="NotificationSplitter" method="splitNotification" /> 
     </recipientList> 
    </route> 

豆子工作正常,但下游路線抱怨: -

org.apache.camel.RuntimeCamelException: java.lang.RuntimeException: Unable to find proto buffer class 

下游路由具有完全相同的protobuf DATAFORMAT配置爲上面的路線。如果我直接路由到下游隊列(即繞過bean並硬編碼「到」隊列),這意味着我也可以跳過解組步驟,它工作正常。

我猜我需要在Camel將消息放到目標隊列之前重新編組數據,但我不知道如何在XML中配置它。我試着簡單地增加......

<marshal ref="notificationProto" /> 

...的recipientList已被確定後,但它並沒有做到這一點(我假設,因爲駱駝已經由當時派出的消息)。

另一種方法是從bean內部進行解組,然後交換機上的數據可能保持不變。我不太清楚如何做到這一點。它會起作用嗎?

感謝您的任何提示。

J.

回答

0

呀數據格式不是一個終點,很容易將消息發送給,否則你可以使用路由名單EIP模式,而是和先發送消息的數據格式,然後目的地。 http://camel.apache.org/routing-slip.html

雖然你可以有一點點的路線

<route> 
    <from uri="direct:marshalMe"/> 
    <marshal ref="notificationProto" /> 
</route> 

然後使用傳送名單,設置爲 「直接:marshalMe,whereYouWannaGoNext」。

一種替代方法是使用攔截器,和截距發送到端點(可以由通配符過濾,或章第EXPS),然後第一做編組。 http://camel.apache.org/intercept 查看該鏈接瞭解更多詳情。

+0

謝謝。我喜歡路由傳送的想法。我的意思是我可以有一個單一的重新編組路線,然後將其有效注入收件人列表。從閱讀的鏈接,它看起來像在實踐中我有一個分流模式代替收件人列表,創建多個消息,併爲每個不同的路由名單(即做了重新編組,然後發送到最終目的地)。這將需要幾天時間才能測試,但會報告回來。 –

+0

嗨, 我又回到了這個,看着攔截選項。這是一個非常簡潔的解決方案。所有目的地列表中的隊列開始用相同的字符串。所以,我將以下內容添加到駱駝環境中,並且它完美地工作。 ' \t \t <編組REF =」 notificationProto」 /> '再次 謝謝, J. –