首页 > 解决方案 > How - Spring 集成:即使应用程序崩溃也能可靠交付

问题描述

现在我们使用 QueueChannel 和 JDBC 消息存储来持久化消息,事务轮询器如下:

    <int:channel id="transaction_jdbc1_InputChannel">
        <int:queue message-store="dataMessageStore"/>
    </int:channel>

    <int:chain input-channel="transaction_jdbc1_InputChannel" output-channel="transaction_jdbc1_OutputChannel">
        <int:poller fixed-delay="1000" error-channel="alertChannel">
            <int:transactional transaction-manager="txManager"/>
        </int:poller>
        <int:transformer ref="jsonToXmlTransformer"/>
    </int:chain>

    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
        <property name="dataSource" ref="mysqlDataSource"/>
    </bean>

问题是如果输入消息是无效的 json 字符串,轮询器只会一遍又一遍地获取它,而其他消息永远不会得到处理。

有没有办法提交事务甚至遇到异常?因为我们会收到警报

还是有更好的可靠交付解决方案?

非常感谢!!

标签: spring-integration

解决方案


<gateway reply-timeout="0" ... />在 poller 后面加一个,调用<transformer/>网关请求通道的下游。

向网关添加错误通道;在该错误流上,检查异常类型,如果是致命错误(例如错误的 JSON),则不要抛出异常,事务将被提交,流将结束。对于所有其他异常,从错误流中重新抛出,事务将回滚。


推荐阅读