可选出站网关失败时在消息之间传递相同负载的策略

时间:2017-03-11 21:57:45

标签: spring error-handling spring-integration

我有一个工作流,其消息有效负载(MasterObj)正在多次丰富。在第二次浓缩()期间,出站网关抛出了UnknownHostException。调用我在富集程序上的错误通道,但错误通道接收的消息是一个异常,并且该异常中的失败消息不再是我的MasterObj(原始有效负载),而是现在从request-payload-expression获取的对象丰富的。

richher调用出站网关,并且在业务方面,这是可选的。我只想用我正在丰富的有效载荷继续我的工作流程。文档说富集器上的错误通道可以用来提供一个替代对象(丰富的请求通道将返回什么),但即使我从富集器的错误中返回一个对象 - 频道,它仍然需要我进入工作流程的整体错误频道。

如何从富裕的+出站网关中捕获错误,并继续使用我正在处理的相同负载处理我的工作流程?

是否正在尝试为整个工作流程维护单个有效负载对象的正确策略?我需要能够随时访问它。

我在考虑使用作为存储有效负载的会话的bean,但这似乎打败了SI的目的,不是吗?

感谢。

1 个答案:

答案 0 :(得分:0)

好吧,如果您担心MasterObj流程中的error-channel,请不要使用request-payload-expression并让原始payload转到更丰富的子流

您始终可以在该流程中使用简单的<transformer expression="">

另一方面,你是对的:通过流支持单个对象不是好策略。您通过频道传送消息,并且每个步骤都绑定是不好的。 Spring Integration的目的是能够随时为不同的MessageChannel类型切换,为生产者和消费者付出很小的努力。当消费者和生产者在不同的机器上时,您也可以切换到分布式模式。

如果您仍需要多次丰富同一个对象,请考虑编写一些自定义Java代码。您可以在此问题上使用@MessagingGateway来获得Spring Integration的收益。

而且,范围对集成流程不利,因为您可以简单地将其切换到不同的渠道类型并丢失ThreadLocal上下文。