2014-09-03 63 views
0

我想开发一个应用程序,使用它我希望能够将zip文件发送到在单独的服务器上运行的消息队列。我已经使用ActiveMQ成功实现了消息传递位,并且队列已启动并侦听服务器端的消息。 我有一个类似的应用程序,它将json文件作为消息发送到队列,并且工作正常。我试图根据前者如何实施来编写我的应用程序。如何轮询目录中的文件并使用spring集成将文件发送到消息队列

下面是我的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出站通道适配器发送到队列的方法似乎不起作用。

我不确定这是否是正确的方法或者是否可行。有人能告诉我这里出了什么问题,我该怎么办?

回答

2

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

虽然java.io.FileSerializable,它并没有真正传输正确(它有很多瞬态字段)。

如果服务器可以访问文件系统(例如NFS),转让只是文件名...

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

如果你要传输的压缩文件(S)的内容,使用

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

3

我知道你的问题是如何纯粹在春天做到这一点,但你有没有看过使用Apache Camel

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

它为您进行轮询,并且具有高度可配置性。它也与您在示例中使用的其他技术非常一致。该路线可以完全在Spring中配置。

相关问题