1

这是我的频道设置:

  1. 一个 jdbc 消息存储支持的队列
  2. 将队列连接到发布-订阅通道的桥接器
  3. pub-sub 通道上配置的 poller 是事务性的

现在,当任何一个订阅者出现异常时,事务就会回滚,并且消息会永远重试。该消息再次被所有订阅者再次处理。如果这至少在订阅者中是一个永久异常,则该消息不会被其他订阅者处理。

这里最好的异常处理策略是什么?
我更喜欢对订阅者进行异常处理,即只有失败的订阅者会重试,其他订阅者将处理消息并继续。

这如何在spring集成中实现?

更多细节在这里..

  1. 如果轮询器是事务性的并且消息在至少一个订阅者中处理失败,则消息将回滚到消息存储并重试。我还为errorChannel 配置了一个jdbc 消息存储。每次消息处理失败时,消息都会回滚到原始消息存储,并且错误通道消息存储每次重试都有一个条目。

  2. 如果轮询器是非事务性的,并且消息在第一个订阅者中处理失败,那么消息将被放入错误通道,但第二个订阅者永远不会收到消息。

似乎有一些根本性的错误..是我的配置吗?

4

1 回答 1

0

http://forum.springsource.org/archive/index.php/t-75000.html
上述线程中的讨论解释了框架相对于 pubsub impl 的优缺点。

我们选择采用以下方法:

  1. 轮询器将是事务性的,这意味着所有订阅者都成功处理了消息,或者没有一个。消息将与所有子重试,直到所有子成功完成。

  2. 错误处理是订阅者的责任

  3. 只有系统异常才会返回到轮询器。业务异常将由订阅者处理,消息将手动放入某个错误通道。

于 2011-07-21T15:00:21.067 回答