spring 集成抛出具有相关 ID 的异常

spring integration throw exception with correlation id

我在使用 spring 集成处理批处理时遇到问题。 通常在splitter之后,所有的element(Message)都会被赋值一个correlation_id,用于以后在Aggregator中的分组,但是问题是当处理element(Message)时抛出异常,会产生MeesageException correlation_id 丢失了。

我可以使用 HeaderEnricher 添加 correlation_id 但我认为它不能硬编码,否则如果有多个请求聚集在一起,事情会被组合在一起,一切都会搞砸。 根本原因是抛出异常时 spring 集成不会附加 correlation_id... 而且似乎永远不会重新获得...

聚合器会抱怨 "CorrelationStrategy is failing"

如何处理? 假设我的期望是批量处理 10 个数据点,我想对 {failed 5, pass 5} 或 sth

给出响应

当 Spring 集成组件抛出 org.springframework.messaging.MessagingException 时,它通常包含 failedMessage 属性 以指示 requestMessage 导致问题。

你需要的headers(correlationIdsequenceNumbersequenceSize等)都在属性里面。

如果您要将 error-handling 结果发送回聚合器,您应该将 headers 从 failedMessage 复制到新创建的消息。

框架默认情况下不会这样做,因为 ErrorMessage 是完全独立的流程,并且不能保证它总是回到主流,例如用于聚合。

Error Handling chapter 中查看更多信息。