Spring integration Spring集成默认重试配置

Spring integration Spring集成默认重试配置,spring-integration,Spring Integration,我有一个spring集成项目,它完成以下工作 1.) Read messages from a queue 2.) Transform messages 3.) Send transformed messages to an Api 步骤1的相关配置 <bean id="cachingConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory"> <prop

我有一个spring集成项目,它完成以下工作

1.) Read messages from a queue
2.) Transform messages
3.) Send transformed messages to an Api
步骤1的相关配置

<bean id="cachingConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
    <property name="targetConnectionFactory" ref="MQConnectionFactory" />
    <property name="sessionCacheSize" value="10"/>
</bean>


<bean id="requestQueue" class="com.ibm.mq.jms.MQQueue">
    <constructor-arg index="0" value="${queuemanager}"/>
    <constructor-arg index="1" value="${incoming.queue}"/>
</bean>


<integration:poller id="poller" default="true" fixed-delay="1000"/>

<jms:message-driven-channel-adapter id="jmsIn"
        destination="requestQueue"
        channel="inputJsonConversionChannel" 
        connection-factory="cachingConnectionFactory" />

步骤3是一个服务激活器,如果出现故障(不是201 HTTP状态),我将抛出一个自定义异常

步骤3的相关配置

<int:service-activator input-channel="ApiChannel" ref="EventApiClient" method="post"/>

<int:service-activator input-channel="errorChannel" ref="PListenerExceptionHandler" method="handleFailure"/>

发生的行为是,它不断尝试连接,并一次又一次地得到相同的错误

我想知道是否有人能向我解释

  • 如何配置/触发此默认重试

  • 如何将错误重定向到错误通道,因为现在步骤1中的错误使用全局错误通道和我创建的默认错误处理程序。但是来自服务激活器的错误不会被忽略

干杯


Kris

它正在重试,因为消息驱动的通道适配器在默认情况下是事务性的,这意味着异常会导致消息回滚到队列中

您可以向适配器添加一个
错误通道
,任何异常都将以
错误消息
的形式发送,该消息具有有效负载
消息异常
,该消息具有属性
失败消息
原因

如果错误通道下游的集成流“消耗”了错误,则将提交事务并删除消息。如果错误流抛出异常,事务将像以前一样回滚

有一个默认的
errorChannel
,默认情况下只记录异常

error-channel="errorChannel"

或者,您可以使用自定义通道并将自己的逻辑放入该通道的订阅服务器中。

您需要显示配置并告诉我们队列是什么技术-RabbitMQ?JMS?抱歉…为了更清晰,我已经更新了帖子。谢谢Gary。将错误通道添加到适配器,它不再回滚