【问题标题】:spring integration handle exception after splitter拆分器后的弹簧集成处理异常
【发布时间】:2016-08-25 20:16:51
【问题描述】:

我是 Spring 集成的新手。

如果我收到带有批处理负载(json 数组)的请求 我使用 splitter 将其拆分为 jsonobject, 然后我进行验证。

如果某些验证失败并将异常抛出到错误通道中。

如何向客户端做出响应,指示某些 jsObject 失败 还有一些作品?

不确定 errorChannel 的处理程序是否会有所帮助,因为验证结果异步进入 errorChannel。

如果我这样调用网关,如何为整个有效负载构造一个验证结果,其中每个 jsObject 都有验证状态?

Future<validationResult> r = gateway.send(...)

(网关直接将请求转发到下一个端点)

【问题讨论】:

    标签: spring-mvc spring-integration


    【解决方案1】:

    您必须查看Aggregator EIP:http://www.enterpriseintegrationpatterns.com/patterns/messaging/Aggregator.htmlhttp://docs.spring.io/spring-integration/reference/html/messaging-routing-chapter.html#aggregator

    因此,您的所有对象都被发送以进行验证,并且它们的结果(好或坏)发送到 <aggregator> 以构建单个 validationResult 以回复该网关。

    【讨论】:

    • 感谢您的帮助。我做了一些测试,有一个问题是,在拆分后,消息将被分配一个correlation_id,以便将来在聚合器中分组。但问题是,如果 splitter 之后的元素之一抛出异常,它将创建一条新消息,并且correlation_id 将丢失。聚合器会抱怨“CorrelationStrategy 失败”。你有解决这个问题的经验吗?
    • 当某些下游组件抛出异常时,它会被包装到带有failedMessage 属性的MessagingException。这正是一个钩子,您可以在其中提取原始标题,包括必需的sequenceNumbersequenceSizecorrelationId。实际上,在发送到聚合器之前,我会将所有这些标头复制到新创建的消息中。
    • 是的,我也会这样做,但我没有捕捉到 failedMessage 属性。我尝试了一个 int:service-activator 来连接错误通道,并以 Message> 消息作为输入的回调方法,我打印了有效负载和消息的标头,它没有 failedMessage 属性...不确定哪一部分去了错了。
    • errorChannel 接收ErrorMessages。 payload 就是 MessagingException 等等。
    • 让我们继续讨论您的问题:stackoverflow.com/questions/39213217/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 2014-12-15
    • 1970-01-01
    相关资源
    最近更新 更多