Spring integration 服务激活器或侦听器容器

Spring integration 服务激活器或侦听器容器,spring-integration,spring-amqp,Spring Integration,Spring Amqp,我正在使用Spring AMQP和Spring集成。我目前正在使用集成中的服务激活器作为我的处理程序。我曾尝试让amqp侦听器也能正常工作,但我从未收到消息。使用服务激活器是公认的做法还是应该使用侦听器 <!-- Receive Inbound messages and process them --> <int-amqp:inbound-channel-adapter channel="sda.text.analytics.process.channel" queue-nam

我正在使用Spring AMQP和Spring集成。我目前正在使用集成中的服务激活器作为我的处理程序。我曾尝试让amqp侦听器也能正常工作,但我从未收到消息。使用服务激活器是公认的做法还是应该使用侦听器

<!-- Receive Inbound messages and process them -->
<int-amqp:inbound-channel-adapter channel="sda.text.analytics.process.channel" queue-names="${sda.text.analytics.process.queue}"
    connection-factory="sda.text.analytics.connectionFactory" prefetch-count="${sda.mule.prefetchCount}"
    concurrent-consumers="${uima.process.threads}" task-executor="analyticsExecutor" receive-timeout="5000"/>

<int:json-to-object-transformer input-channel="sda.text.analytics.process.channel" type="com.issinc.sda.ingest.impl.IngestBean"/>

<bean id="analyticsExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
    <property name="corePoolSize" value="${uima.process.threads}" />
    <property name="maxPoolSize" value="${uima.process.threads}" />
    <property name="queueCapacity" value="${sda.mule.prefetchCount}" />
</bean>

<!-- Service that listens for an inbound messages, processes the text and sends the processed text back -->
<int:service-activator input-channel="sda.text.analytics.process.channel" output-channel="sda.text.analytics.response.channel"
   ref="asyncExtractionService" method="processMessage" >
</int:service-activator>
<!--<rabbit:listener-container connection-factory="sda.connectionFactory" message-converter="jsonMessageConverter">
    <rabbit:listener ref="asyncExtractionService" method="processMessage" queue-names="${sda.process.queue}" />
</rabbit:listener-container>-->

您根本没有真正“使用”服务激活器;您正在调用与服务激活器相同的bean/方法

考虑使用AMQP入站通道适配器通过
sda.process.channel

将消息发送到service activator,因为您根本没有真正“使用”service activator;您正在调用与服务激活器相同的bean/方法


考虑使用AMQP入站通道适配器通过
sda.process.channel

向service activator发送消息。我有一个通道适配器:如您所见,代码/配置在这里的注释中呈现不好。最好编辑你的问题。队列中有消息吗?你的属性正确吗?一般来说,打开调试日志将提供足够的信息来调试类似的问题。您还应该查看。谢谢Gary,我已经看到了示例并阅读了文档。有几件事我还不太清楚。我的服务激活器正在工作。我应该说得更清楚些。我真正的问题是使用服务激活器是否正确,我是否应该使用侦听器容器,或者这是否无关紧要?这实际上取决于您的需求。Spring集成是一个更高级别的抽象,它允许您将组件与消息传递松散地耦合在一起。如果您只想为每条消息调用一些POJO,而不做其他事情,那么您根本不需要Spring集成。但是,如果您希望在调用POJO之前能够灵活地添加过滤器、变压器等,即使以后再调用POJO,那么SI就是最好的选择。谢谢Gary。我有一个通道适配器:如您所见,代码/配置在这里的注释中呈现不好。最好编辑你的问题。队列中有消息吗?你的属性正确吗?一般来说,打开调试日志将提供足够的信息来调试类似的问题。您还应该查看。谢谢Gary,我已经看到了示例并阅读了文档。有几件事我还不太清楚。我的服务激活器正在工作。我应该说得更清楚些。我真正的问题是使用服务激活器是否正确,我是否应该使用侦听器容器,或者这是否无关紧要?这实际上取决于您的需求。Spring集成是一个更高级别的抽象,它允许您将组件与消息传递松散地耦合在一起。如果您只想为每条消息调用一些POJO,而不做其他事情,那么您根本不需要Spring集成。但是,如果您希望在调用POJO之前能够灵活地添加过滤器、转换器等,即使以后会这样做,那么SI就是一种选择。