java - 捕捉 Spring Integration DSL 错误配置异常?
问题描述
有没有办法捕捉DestinationResolutionException
和MessageDispatchingException
使用 DSL 时?这些异常通常表明配置错误,但我不确定如何配置我的流程来捕获这些异常并应用一些自定义逻辑?
@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
实际上是一个请求-回复组件,具有必需的非空返回值。因此,您真的不能transform()
只为单向流配置。当流中没有下一个通道或消息中没有标头时,它将引发异常replyChannel
。
推荐阅读
- ffmpeg - 尝试记录器 RTSP 流 FFMPEG 时出错
- php - 相同 JID、不同资源的 XMPP 存在
- ios - 当用户进入/退出 iOS 中的位置区域时,在后台执行任务(代码执行/网络调用)
- keras - ImageDataGenerator.fit() 函数在 Keras 图像预处理中的作用是什么?
- php - 如何显示响应 json
- java - 为什么恢复下载会在 Java 应用程序中下载损坏的文件?
- apache - 如何在 Springboot 2.1.1 Final 中配置 CXF servlet?
- python-3.x - 尽管 pip3 show 找到了 python 包,但无法导入它
- dart - 如何为 SliverAppBar 添加抽屉
- r - change specific component of list in R