我正在尝试通过编写使用各种EIP的简单路由来学习如何使用Apache Camel。我的导师建议Apache ServiceMix作为测试简单路由的好服务器,所以我使用的是Apache ServiceMix 5.1.0。目前,我正在尝试创建一个从文件读取请求的路由,用来自第二个文件的响应替换请求的内容,并将该响应写入第三个文件。
理想情况下,第二个文件不会被删除;我最终希望在其他自学教程路由中使用此模式,第二个文件将模仿Web服务的响应。但是,我现在只是想让它工作,所以我不会使noop
等选项变得复杂。
如果我正确读取the Apache Camel Wiki page for the Content Enricher,则从enrich
EIP中省略聚合策略将使Camel丢弃消息的内容并将其替换为从资源获取的正文。所以,我认为这个Camel Route会做我想做的事情:
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:camel="http://camel.apache.org/schema/blueprint" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd">
<camelContext xmlns="http://camel.apache.org/schema/blueprint">
<route>
<from uri="file:camel/inMessage/?fileName=replaceMe.txt" />
<enrich uri="file:camel/storedResponse/?fileName=withThis.txt" />
<to uri="file:camel/outMessage/?fileName=output.txt" />
</route>
</camelContext>
</blueprint>
实际发生的是camel/storedResponse/withThis.txt
的内容被camel/inMessage/replaceMe.txt
的内容替换。文件camel/outmessage/output.txt
已创建,但其中包含replaceMe.txt
的内容,而不是withThis.txt
。
由于我还是Camel的新手,我认为问题只是我误读了文档中的内容,或忽略了明显的配置问题。
对于它的价值,这里是开始路线之前文件的内容。
replaceMe.txt
This is the message sent. It should not appear in the response.
withThis.txt
This is the file stored in the server. The response should contain this text.
output.txt does not yet exist.
以下是路线完成后文件的内容。
replaceMe.txt has been deleted.
withThis.txt
This is the message sent. It should not appear in the response.
output.txt
This is the message sent. It should not appear in the response.
感谢您的时间。
答案 0 :(得分:2)
来自Camel doc:
rich 使用Producer获取其他数据。它通常用于请求回复消息传递,例如用于调用外部Web服务。另一方面, pollEnrich 使用轮询消费者来获取其他数据。它通常用于事件消息消息传递,例如读取文件或下载FTP文件。
如果使用enrich
,那么withThis.txt
的内容将替换为replaceMe.txt
的内容,而这不是您想要的。请改用pollEnrich
:
<pollEnrich uri="file:camel/storedResponse/?fileName=withThis.txt" />
答案 1 :(得分:-1)
丰富像a的作品 你的路线实际上是写从replaceMe.txt收到的body到withThis.txt,而不会改变身体的任何东西。因此最终结果 pollEnrich需要用于实际读取来自withThis.txt