我希望有人可以解释一下如何配置Camel来编组和解组数据。我有一个调用bean的路由,以确定一个recipientList。这是基于消息的内容(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并硬编码“to”队列),这意味着我也可以跳过解组步骤,它工作正常。
我想我需要在Camel将消息放入目标队列之前重新封送数据,但我不知道如何在XML中配置它。我试过简单地添加......
<marshal ref="notificationProto" />
...在确定了recipientList之后但它没有这样做(我假设因为Camel已经在那时调度了消息)。
另一种方法是从bean中进行解组,因为交换机上的数据可能会保持不变。我不太清楚如何做到这一点。它会起作用吗?
感谢您的任何提示。
学家
答案 0 :(得分:0)
是的,数据格式不是易于发送消息的端点,否则您可以使用路由滑动EIP模式,然后首先将消息发送到数据格式,然后发送到目标。 http://camel.apache.org/routing-slip.html
虽然你可以有一点路线
<route>
<from uri="direct:marshalMe"/>
<marshal ref="notificationProto" />
</route>
然后使用路由单,设置为&#34; direct:marshalMe,whereYouWannaGoNext&#34;。
另一种方法是使用拦截器,并拦截发送到端点(您可以通过通配符或reg exps过滤),然后先执行编组。 http://camel.apache.org/intercept 有关更多详细信息,请参阅该链接。