首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring-Integration默认重试配置

Spring-Integration默认重试配置
EN

Stack Overflow用户
提问于 2017-05-10 07:00:30
回答 1查看 1.2K关注 0票数 0

我有一个spring集成项目,它执行以下操作

代码语言:javascript
复制
1.) Read messages from a queue
2.) Transform messages
3.) Send transformed messages to an Api

步骤1的相关Config

代码语言:javascript
复制
<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的相关配置

代码语言:javascript
复制
<int:service-activator input-channel="ApiChannel" ref="EventApiClient" method="post"/>

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

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

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

  • 如何配置/触发默认重试?
  • 如何将错误重定向到错误通道,因为现在步骤1中的错误使用全局错误通道和我创建的默认错误处理程序。但是来自的错误不是。

干杯

克里斯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-11 12:55:05

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

您可以向适配器添加一个error-channel,任何异常都将以ErrorMessage的形式发送,该ErrorMessage具有一个具有属性failedMessagecause的有效负载MessagingException

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

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

代码语言:javascript
复制
error-channel="errorChannel"

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43885535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档