0

我希望有人能解释一下如何配置 Camel 来编组和解组数据。我有一个调用 bean 以确定收件人列表的路由。这是基于消息的内容(protobuf)。

路线配置如下所示:-

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

bean 工作正常,但下游路由抱怨:-

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 中进行解组,因为这样交换上的数据可能会保持不变。我不太确定该怎么做。它会起作用吗?

感谢您的任何提示。

J。

4

1 回答 1

0

是的,数据格式不是一个易于向其发送消息的端点,否则您可以改用路由单 EIP 模式,然后先将消息发送到数据格式,然后再发送到目的地。http://camel.apache.org/routing-slip.html

虽然你可以有一条小路

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

然后使用路由单,设置为“direct:marshalMe,whereYouWannaGoNext”。

另一种方法是使用拦截器,并拦截发送到端点(您可以通过通配符或 reg exps 过滤),然后先进行封送处理。http://camel.apache.org/intercept 有关更多详细信息,请参阅该链接。

于 2012-11-18T11:57:35.563 回答