Spring Cloud Stream 3.1.3使用StreamBridge发消息报类转换异常求助
问题根因
该异常是Spring Cloud Stream 3.1.x版本的固有缺陷,当未在配置文件中显式声明对应output绑定的函数定义时,StreamBridge内部初始化逻辑会触发类型转换错误。
适配3.1.3版本的临时解决方案
以下两种方案任选其一即可:
- 方案一:添加配置强制注册空函数占位
在application.yml/application.properties中添加如下配置,为你的output绑定声明空函数占位即可:
spring: cloud: stream: function: definition: produceMessage; bindings: produceMessage-out-0: destination: 你的Kafka Topic名称 # 其余原有binder配置保持不变
注意:函数名produceMessage要和output binding名的前缀完全一致,末尾的;不可省略,用于告知框架这是显式声明的空函数,触发正确的初始化逻辑
- 方案二:调整StreamBridge调用参数,绕开异常分支
修改生产者类的produce方法代码,不提前构建Message对象,直接拆分payload和header传入send方法:
public void produce(int messageId, Object message) { log.info("Sending test message through Kafka: {}", message); Map<String, Object> headers = new HashMap<>(); headers.put(PARTITION_KEY, messageId); streamBridge.send("produceMessage-out-0", message, headers); }
该方式可以绕开触发类转换异常的Message处理分支,3.1.3版本实测可正常运行。
如果以上方案都不适用,可以在项目依赖中强制覆盖spring-cloud-function-context的版本为3.1.7,该版本修复了对应类转换问题,且和Spring Cloud Stream 3.1.3完全兼容,无需修改其他业务代码。
内容的提问来源于stack exchange,提问作者Vin
相关产品推荐
相关产品推荐

