繁体   English   中英

如何使用Spring Integration轮询目录中的文件并将文件发送到消息队列

[英]how to poll a directory for files and send the files to a message queue using spring integration

我正在尝试开发一个应用程序,希望通过该应用程序将zip文件发送到在单独服务器上运行的消息传递队列。 我已经使用ActiveMQ成功实现了消息传递位,并且队列已建立并且正在侦听服务器端的消息。 我有一个类似的应用程序,它将json文件作为消息发送到队列,并且工作正常。 我试图根据前者的实现方式来编写我的应用程序。

以下是我的Spring集成配置的一部分:

<int-file:inbound-channel-adapter id="filesIn" directory="${harvest.directory}" filename-pattern="*.zip">
    <int:poller id="poller" fixed-rate="${harvest.pollRate}" max-messages-per-poll="${harvest.queueCapacity}" />
</int-file:inbound-channel-adapter>

<int:transformer id="copyFiles" input-channel="filesIn"
    output-channel="routingChannel" ref="transformationHandler" method="handleFile"/>

<int-jms:outbound-channel-adapter id="jmsOut" destination="requestQueue" channel="filesIn"/>
.
.
.
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
    <property name="brokerURL" value="${activemq.url}" />
</bean>
<bean id="requestQueue" class="org.apache.activemq.command.ActiveMQQueue">
    <constructor-arg value="myQueue"/>
</bean> 

如您所见,这里有一个变压器。 但就我而言,我什么也没变,很乐意在可能的情况下掉下变压器。 我只需要能够轮询目录中的zip文件,只要有目录,就将其发送到名为myQueue的队列中。 不幸的是,从filesIn入站通道适配器接收文件并使用jmsOut出站通道适配器发送到队列的方法似乎不起作用。

我不确定这是否是正确的方法或是否可行。 有人可以告诉我这是怎么回事,我应该怎么做?

我知道您的问题是纯粹在Spring中如何执行此操作,但是您是否考虑过使用Apache Camel

最具体地说,是File组件和JMS(JMS / ActiveMQ)组件之一。

它为您进行轮询,并且高度可配置。 它也可以与示例中使用的其他技术很好地配合使用。 该路由可以完全在Spring中配置。

您是否要发送File对象或内容?

虽然java.io.FileSerializable ,但它实际上并不能正确传输(它具有许多临时字段)。

如果服务器可以访问文件系统(例如NFS),则仅传输文件名...

<int:transformer ... expression="payload.absolutePath" />

如果要传输zip文件的内容,请使用

<int-file:file-to-bytes-transformer/>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM