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(correlationId
、sequenceNumber
、sequenceSize
等)都在属性里面。
如果您要将 error-handling 结果发送回聚合器,您应该将 headers 从 failedMessage
复制到新创建的消息。
框架默认情况下不会这样做,因为 ErrorMessage
是完全独立的流程,并且不能保证它总是回到主流,例如用于聚合。
在 Error Handling chapter 中查看更多信息。
我在使用 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(correlationId
、sequenceNumber
、sequenceSize
等)都在属性里面。
如果您要将 error-handling 结果发送回聚合器,您应该将 headers 从 failedMessage
复制到新创建的消息。
框架默认情况下不会这样做,因为 ErrorMessage
是完全独立的流程,并且不能保证它总是回到主流,例如用于聚合。
在 Error Handling chapter 中查看更多信息。