如何为同一函数定义配置多个输入绑定?
问题解决:Spring Cloud Stream单消费函数绑定多输入仅第一个生效
问题原因
你定义的是单个Consumer<Message<String>>类型的Bean,Spring Cloud Stream默认情况下,这类单实例Consumer只会对应一个输入绑定(即testConsumer-in-0),额外的testConsumer-in-1绑定会被框架忽略,因此只有第一个输入目标被监听。
解决方案
方案1:返回Consumer数组
修改Java代码,让Bean返回Consumer数组,每个数组元素对应一个输入绑定:
@Bean public Consumer<Message<String>>[] testConsumer() { // 两个Consumer实例复用相同的处理逻辑 Consumer<Message<String>> handler = incomingMessage -> { log.debug("received from kafka-binder"); }; return new Consumer[] { handler, handler }; }
YAML配置无需修改function.definition,保持testConsumer即可,框架会自动将testConsumer-in-0和testConsumer-in-1分别绑定到数组的两个元素上。
方案2:重复定义函数名
在YAML的function.definition中重复函数名,让框架为每个重复项创建独立的绑定,从而复用同一个函数逻辑:
spring: cloud: function: definition: testConsumer;testConsumer # 重复函数名,对应两个输入绑定 stream: bindings: testConsumer-in-1: destination: test-request-a1 binder: kafka1 group: test-consumer-group-a1 testConsumer-in-0: destination: test-request-a2 binder: kafka2 group: test-consumer-group-a2
这种方式不需要修改Java代码,通过配置层面声明两个消费实例,共用同一个函数逻辑处理不同的输入源。
内容的提问来源于stack exchange,提问作者Mahi Praneeth Rayi
相关产品推荐
相关产品推荐

