当SEDA组件从文件组件中消耗时,SEDA队列最接近的是什么?是List<File>
吗?一个List<String>
个文件路径?
答案 0 :(得分:3)
我刚才这样做了。在文件使用者中,直到你触摸身体才会实际加载文件。文件路径在标头中传递,带有一些其他变量。在转换它之前,正文将包含一个org.apache.camel.component.file.GenericFile
对象。每条消息只有一个文件而不是文件列表。
如果你有以下路线,假设这是你正在使用的文本文件:
<from uri="file:d:/Inbox?delay=5000&move=.donebackup/placement/${date:now:yyyyMMdd}/${file:onlyname.noext}_DONE_${date:now:yyyyMMddHHmmss}.${file:name.ext}&readLock=changed&include=.*.dl&maxMessagesPerPoll=0&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&move=.donebackup/placement/${date:now:yyyyMMdd}/${file:onlyname.noext}_DONE_${date:now:yyyyMMddHHmmss}.${file:name.ext}&readLock=changed&include=.*.dl&maxMessagesPerPoll=0&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包含一些有趣的例子。