java - 如何使用 spring 集成轮询目录中的文件并将文件发送到消息队列

标签 java spring jms activemq 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 接收文件的方法入站 channel 适配器并使用 jmsOut 发送到队列出站 channel 适配器似乎无法正常工作。

我不确定这是否是正确的方法或者是否可行。有人可以告诉我这里出了什么问题以及我应该做什么吗?

最佳答案

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

特别是File组件和 JMS (JMS/ActiveMQ) 组件之一。

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

关于java - 如何使用 spring 集成轮询目录中的文件并将文件发送到消息队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25635965/

相关文章:

java - 为什么 OpenJDK 将私有(private)方法放入 vtable 中?

java - Apache HttpClient 空响应 header

spring - 是否有任何内置方法可以利用外部服务器的 "tomcat-users.xml"?

java - Spring Security - j_spring_security_check - HTTP 状态 403

java - 如何在 Google Cloud Console 的同意屏幕上更改电子邮件帐户?

java - log4j 喜欢 jar 文件中的属性吗?

java - 集成Spring和jersey时在web.xml中指定context-param

java - 客户端监听 JMS 队列在架构上是错误的吗?

c# - 如何通过Stomp.js设置回复主题

java - Spring Integration DSL JMS 入站/出站网关