升级到Spring Boot2.6.1与Spring Cloud2021.0.0后Spring Cloud Stream启动报错
问题根因
这个是Spring Cloud Sleuth 3.1.0版本(对应Spring Cloud 2021.0.0默认依赖的Sleuth版本)的已知框架bug,和你的业务代码没有关系,也不存在遗漏适配步骤的问题。
问题出在TraceFunctionAroundWrapper类的类型转换逻辑:当你的消费者Function定义为输入Flux<T>、输出Mono<Void>的响应式函数时,Sleuth的埋点逻辑错误地将返回的Mono类型强制转换为Flux,直接触发ClassCastException。
解决方案
有三种可选处理方式,优先推荐前两种依赖升级方案:
- 方案1:升级Spring Cloud版本到2021.0.1及以上,该版本默认依赖的Sleuth已经修复了这个bug,不需要修改任何业务代码即可正常启动。
- 方案2:如果暂时无法升级Spring Cloud整体版本,可以手动指定Sleuth的依赖版本为3.1.1及以上,单独修复该问题。
- 方案3:临时规避方案,修改消费者Function的返回值类型为
Flux<Void>,将原来返回的Mono调用.flux()方法转为Flux类型即可绕开转换逻辑,该方案不需要升级依赖,但属于临时兼容手段,后续还是建议升级框架版本。
内容的提问来源于stack exchange,提问作者codependent
相关产品推荐
相关产品推荐

