当SEDA组件从File组件消耗时,正在消耗什么?

时间:2014-02-20 20:43:32

标签: java file apache-camel

当SEDA组件从文件组件中消耗时,SEDA队列最接近的是什么?是List<File>吗?一个List<String>个文件路径?

1 个答案:

答案 0 :(得分:3)

我刚才这样做了。在文件使用者中,直到你触摸身体才会实际加载文件。文件路径在标头中传递,带有一些其他变量。在转换它之前,正文将包含一个org.apache.camel.component.file.GenericFile对象。每条消息只有一个文件而不是文件列表。

如果你有以下路线,假设这是你正在使用的文本文件:

<from uri="file:d:/Inbox?delay=5000&amp;move=.donebackup/placement/${date:now:yyyyMMdd}/${file:onlyname.noext}_DONE_${date:now:yyyyMMddHHmmss}.${file:name.ext}&amp;readLock=changed&amp;include=.*.dl&amp;maxMessagesPerPoll=0&amp;sortBy=${file:length}"/>
<convertBodyTo type="java.lang.String"/>
<log message="Converted File To String:${date:now:yyyy-MM-dd HH:mm:ss} handing data to File To DB route."/>
<to uri="seda:fileToDB"/>

你的身体会包含字符串。这是因为我将身体从org.apache.camel.component.file.GenericFile转换为字符串,然后再将其发送到seda:fileToDB路线。

但是如果你有:

<from uri="file:d:/Inbox?delay=5000&amp;move=.donebackup/placement/${date:now:yyyyMMdd}/${file:onlyname.noext}_DONE_${date:now:yyyyMMddHHmmss}.${file:name.ext}&amp;readLock=changed&amp;include=.*.dl&amp;maxMessagesPerPoll=0&amp;sortBy=${file:length}"/>
<to uri="seda:fileToDB"/>

不会加载正文,因此邮件正文将在org.apache.camel.component.file.GenericFile路由中包含seda:fileToDB,并且只包含标题中的文件路径。就像我之前提到的那样,在你使用身体之前,文件没有加载。

如果你使用二进制文件,你会加载这样的主体:

byte[] filedata = exchange.getIn().getBody(byte[].class);

然后正文将包含byte[]

如果您执行此操作File file = msg.getIn().getBody(File.class);,则正文将包含文件对象。

所以这取决于你之前对身体的影响。如果将其转换为某种适当的数据类型,则会包含该类型,否则将为org.apache.camel.component.file.GenericFile

这个link on camel包含一些有趣的例子。