spring-integration - 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 字符串,轮询器只会一遍又一遍地获取它,而其他消息永远不会得到处理。
有没有办法提交事务甚至遇到异常?因为我们会收到警报
还是有更好的可靠交付解决方案?
非常感谢!!
解决方案
<gateway reply-timeout="0" ... />
在 poller 后面加一个,调用<transformer/>
网关请求通道的下游。
向网关添加错误通道;在该错误流上,检查异常类型,如果是致命错误(例如错误的 JSON),则不要抛出异常,事务将被提交,流将结束。对于所有其他异常,从错误流中重新抛出,事务将回滚。
推荐阅读
- c# - 给定一个外壳扩展 CLSID,您如何找到实现 COM 可执行文件或 DLL,并检查其接口和成员?
- python - 将单个 Pandas 数据框值除以数据集中的相应值
- flutter - 颤振错误 - 类型'未来
' 不是 'Widget' 类型的子类型 - json - 如何解析 google book api 并访问类属性(vb.net)
- jetty - 如何使用 XML 禁用 Jetty DefaultHandler(以防止目录列表和 webapp 上下文列表)
- javascript - 按钮单击事件在我的 NodeJs 应用程序中无休止地运行
- javascript - JS中使用字符串调用函数
- python - python笔记本中的朱莉娅魔法
- shopware - Shopware 数据库凭据
- python - 如何使用 ROS 导入自定义 python 模块?