Apache camel 驼峰:两条路线之间的通信

Apache camel 驼峰:两条路线之间的通信,apache-camel,messaging,mom,Apache Camel,Messaging,Mom,我对骆驼基本上是新手。我设置了一个camel上下文,其中包含两条使用seda端点的路由。 简单地说,所有这些都是从一个“from”文件端点开始的(对不起,如果这个术语不正确的话),监听一个目录: <route> <from uri="file:mydir"/> <process ref="a bean that change the body of the message by setting a custom object"/> &l

我对骆驼基本上是新手。我设置了一个camel上下文,其中包含两条使用seda端点的路由。 简单地说,所有这些都是从一个“from”文件端点开始的(对不起,如果这个术语不正确的话),监听一个目录:

<route>
    <from uri="file:mydir"/>
    <process ref="a bean that change the body of the message by setting a custom object"/>
    <to uri="seda:incoming"/>
</route>
<route>
    <from uri="seda:incoming"/>
    <process ref="a bean that does something with the custom object above"/>
    ....
</route>

....
现在,上面描述的工作非常完美,但我需要使用activemq队列更改seda,在这样做之后,第二个处理器接收的消息体是空的

如何使用activemq通道获得seda端点的相同行为

exchange.getIn().setBody(myCustomBean)

exchange.getIn().setHeader(“inputfile”,aFileInstance)

若您希望在从activemq队列获取时得到一些结果,那个么应该将可序列化对象发送到队列。否则,对象将不会被转移。 在您的情况下,不能保证myCustomBean和aFileInstance是可序列化的。
基本上,尝试将字符串发送到队列中。或者使对象可序列化。

查看“通过设置自定义对象更改消息正文的bean”中的操作可能会很有用。您可以显示不起作用的路由。您好,感谢您的回复。第一个bean所做的只是(在流程方法的最后一行)exchange.getIn().setBody(myCustomBean)和exchange.getIn().setHeader(“inputfile”,aFileInstance)。第二个处理器上的body和“inputfile”头都为null(使用activemq时),我不知道路由是否不起作用。使用调试器,我看到seda的所有操作都在内存中完成,交换的消息是GenericFileMessage。当使用activemq时,消息是一个JMSMessage,在路由之间只交换原始消息(来自“file:mydir”的消息);如果不是同一个实例,则会使用不同的id创建一个新的JMSMessage实例(因为我运行的是嵌入式activemq,所以我也希望使用相同的id),但无论如何,前面设置的主体和头都为null。JMS对可以发送的内容有限制。请参阅:My object实现serializable和java.io.File中的关于映射消息部分。bean是否实现了#writeObject、#readObject和#ReadObjectNodeData?这里的细节:Archer,我们要离开主题了:Serializable是一个“标记”和“特殊”接口:它比其他接口意味着更多的东西……仔细阅读上面提到的页面中所写的内容。