使用StreamBridge调用Spring Cloud Function为何生成空Kafka主题publish-in-0?
解答
原因分析
- Function绑定的自动生成:你的
publish是Function类型的Bean,Spring Cloud Stream会为这类Function自动生成对应的输入绑定(publish-in-0)和输出绑定(publish-out-0)。输入绑定对应Kafka主题,用于接收消息并交给Function处理,输出绑定则将Function的处理结果发送到指定目标主题。 - Kafka Binder的自动创建主题机制:Kafka Binder默认开启了
auto-create-topics配置(默认值为true),只要检测到某个绑定被引用(比如你通过StreamBridge往publish-in-0发送消息),就会自动在Kafka集群中创建对应的主题。 - 主题为空的原因:发送到
publish-in-0主题的消息会立刻被你的publishFunction消费并处理,处理完成后消息被转发到publish-out-0对应的目标主题,因此publish-in-0主题内不会留存消息,看起来始终为空。
解决方案
如果你不想让publish-in-0主题被自动创建,可以选择以下方式:
- 关闭全局自动创建主题:在配置中添加
spring.cloud.stream.kafka.binder.auto-create-topics=false - 针对特定绑定关闭自动创建:仅关闭
publish-in-0的自动创建spring.cloud.stream.bindings.publish-in-0.kafka.binder.auto-create-topics=false - 绕过输入绑定直接发送:如果你的场景只是需要通过Function输出消息,无需通过输入绑定触发,可以直接用
StreamBridge发送到输出绑定,这样就不会创建输入主题:streamBridge.send("publish-out-0", "kafka", ProducerPayload.builder().event(event).content(entity).build(), MimeType.valueOf("application/json"));
内容的提问来源于stack exchange,提问作者Anadi Misra
相关产品推荐
相关产品推荐

