捕获 Spring 集成 DSL 配置错误异常?
Catching Spring Integration DSL misconfiguration exceptions?
有没有办法在使用 DSL 时捕获 DestinationResolutionException
和 MessageDispatchingException
?这些异常通常表示配置错误,但我不确定如何配置流程以捕获这些异常并应用一些自定义逻辑?
@SpringBootApplication
public class IntegrationMisconfigurationExampleApplication {
public static void main(final String[] args) {
SpringApplication.run(IntegrationMisconfigurationExampleApplication.class, args);
}
@Bean
public IntegrationFlow loggingFlow() {
return IntegrationFlows.from("input")
.<String, String>transform(String::toUpperCase)
// .nullChannel();
.get();
}
@Bean
public CommandLineRunner demo() {
return args -> {
final MessagingTemplate template = messagingTemplate();
template.convertAndSend("input", "abc");
};
}
@Bean
public MessagingTemplate messagingTemplate() {
return new MessagingTemplate();
}
}
上面的示例抛出 DestinationResolutionException
,因为 loggingFlow.transformer#0
未正确初始化。有没有办法捕获这个异常?
这些异常是 运行时 错误。我们真的无法确定启动时的错误配置。
像这样捕获运行时异常并进行一些分析工作的方法是使用 ExpressionEvaluatingRequestHandlerAdvice
,您可以将其添加到端点配置的第二个参数中的 transform(String::toUpperCase)
配置中:
.<String, String>transform(String::toUpperCase, e-> e.advice(myExpressionEvaluatingRequestHandlerAdvice()))
在参考手册中查看有关此建议的更多信息:https://docs.spring.io/spring-integration/docs/current/reference/html/#message-handler-advice-chain
您还需要记住 transformer
实际上是一个 request-reply 组件,需要 non-null return 值.因此,您真的不能只为 one-way 流程配置 transform()
。当流程中没有下一个通道或消息中没有replyChannel
header时,它将抛出异常。
有没有办法在使用 DSL 时捕获 DestinationResolutionException
和 MessageDispatchingException
?这些异常通常表示配置错误,但我不确定如何配置流程以捕获这些异常并应用一些自定义逻辑?
@SpringBootApplication
public class IntegrationMisconfigurationExampleApplication {
public static void main(final String[] args) {
SpringApplication.run(IntegrationMisconfigurationExampleApplication.class, args);
}
@Bean
public IntegrationFlow loggingFlow() {
return IntegrationFlows.from("input")
.<String, String>transform(String::toUpperCase)
// .nullChannel();
.get();
}
@Bean
public CommandLineRunner demo() {
return args -> {
final MessagingTemplate template = messagingTemplate();
template.convertAndSend("input", "abc");
};
}
@Bean
public MessagingTemplate messagingTemplate() {
return new MessagingTemplate();
}
}
上面的示例抛出 DestinationResolutionException
,因为 loggingFlow.transformer#0
未正确初始化。有没有办法捕获这个异常?
这些异常是 运行时 错误。我们真的无法确定启动时的错误配置。
像这样捕获运行时异常并进行一些分析工作的方法是使用 ExpressionEvaluatingRequestHandlerAdvice
,您可以将其添加到端点配置的第二个参数中的 transform(String::toUpperCase)
配置中:
.<String, String>transform(String::toUpperCase, e-> e.advice(myExpressionEvaluatingRequestHandlerAdvice()))
在参考手册中查看有关此建议的更多信息:https://docs.spring.io/spring-integration/docs/current/reference/html/#message-handler-advice-chain
您还需要记住 transformer
实际上是一个 request-reply 组件,需要 non-null return 值.因此,您真的不能只为 one-way 流程配置 transform()
。当流程中没有下一个通道或消息中没有replyChannel
header时,它将抛出异常。