2012-11-16 63 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. –