如果出现错误,Spring集成会使用注释更改出站回复通道

时间:2015-01-07 17:59:31

标签: spring spring-integration

我正在使用Spring Integration,我有这种普通的服务:

public class SampleService {
   @ServiceActivator(inputChannel="A", outputChannel="B")
   public void process(String msg) {
      // ...
   }
}

还有类似方式激活的其他服务(SampleService2,...)。这些主要是链接的(即SampleService - > SampleService2 - > ... - > SampleServiceN),除非出现错误且问题与此有关。

在处理过程中,我可能遇到一个问题 - 来自其他服务的异常或只是无效的数据。我希望每个服务都有自己的出站渠道来报告问题,以便我可以自定义如何完成。某些服务可能具有不同的队列,具体取决于问题的类型。例如。根据错误的类型,服务可以:

  • 将请求发送到延迟队列以便以后重新处理
  • 发送服务以邮寄问题,
  • 发送给另一个可能有更好逻辑处理(但速度较慢)的服务
  • 在链中间停止处理此请求

等等。

我正在考虑更改出站频道或说“停止处理”。首先,我不知道如何使用注释来做到这一点。我已经看到使用xml配置我可以使用标头更丰富,是这样的方式去?如果是这样,如何处理注释?

相反,这是最好的方法,还是有更适合Spring Integration的方法?

1 个答案:

答案 0 :(得分:1)

一种解决方案是在每个服务之间放置一个内联网关;这样你就可以为每个服务设置不同的错误通道。

使用XML很容易;注释有点棘手;然而,新的Java DSL让生活变得更轻松。

请参阅this Gist了解如何使用Java 8 lambdas。

如果需要,我可以创建Java 6/7版本。