该建议不会有帮助,因为它只适用于该端点,而不适用于下游流,而且,在任何情况下,即使它应用了,到执行器的切换也会成功,并且任何下游异常都由执行器处理(它被包装在一个
ErrorHandlingTaskExecutor
用一个
MessagePublishingErrorHandler
尝试用标题充实器替换该组件,并设置
errorChannel
标题。或者您可以使用配置了错误通道的MPEH来包装TE(executor通道将检测到TE已经是EHTE)。
编辑
这对我来说很好。。。
@SpringBootApplication
public class So52526134Application {
public static void main(String[] args) {
SpringApplication.run(So52526134Application.class, args);
}
@Bean
public IntegrationFlow mainFlow() {
return IntegrationFlows.from(() -> "foo", e -> e.poller(Pollers.fixedDelay(5000)))
.enrichHeaders(h -> h.header(MessageHeaders.ERROR_CHANNEL, "myErrors.input"))
.channel(MessageChannels.executor(executor()))
.handle((p, h) -> {
throw new RuntimeException("foo");
})
.get();
}
@Bean
public IntegrationFlow myErrors() {
return f -> f.handle((p, h) -> {
System.out.println("in my error flow");
return p;
})
.handle(System.out::println);
}
@Bean
public TaskExecutor executor() {
return new ThreadPoolTaskExecutor();
}
}
in my error flow
ErrorMessage [payload=org.springframework.messaging.MessageHandlingException: ...