这是我的通道设置。
现在,当任何一个订阅者出现异常时,事务就会回滚,消息就会永远重试。该消息再次被所有的订阅者处理。如果这是在至少一个订阅者中发生的永久异常,那么消息就不会被其他任何一个订阅者处理。
这里最好的异常处理策略是什么?我更倾向于在订阅者上进行异常处理,即只有失败的订阅者会重试,其他订阅者会处理消息并继续前进。
如何在spring集成中实现?
更多细节在这里...
如果轮询器被做成事务性的,消息在至少一个订阅者中处理失败,那么消息就会被滚回消息存储,并重试。我还为errorChannel配置了一个jdbc消息存储。每次消息处理失败,消息就会被滚回原来的消息存储中,错误通道消息存储中每重试一次就有一个条目。
如果将轮询器做成非事务性的,消息在第一个订阅者中处理失败,那么消息就会被放到错误通道,但第二个订阅者永远不会收到消息。
这似乎有什么根本性的问题。是我的配置有问题吗?
http:/forum.springsource.orgarchiveindex.phpt-75000.html 上文中的讨论解释了该框架与pubsub impl的优缺点。
我们选择了下面的方法。
投票器将是事务性的,这意味着所有的订阅者都会成功地处理消息,或者没有。消息将对所有子进行重试,直到所有子成功完成。
错误处理由订阅者负责
只有系统异常才会冒泡返回到轮询器。业务异常将由用户处理,消息将被手动放到某个错误通道。