spring-kafka 监听器签名

Posted

技术标签:

【中文标题】spring-kafka 监听器签名【英文标题】:spring-kafka listener signature 【发布时间】:2022-01-03 03:16:39 【问题描述】:

我尝试在 *** 上搜索此内容,但找不到合理的答案。我对使用@Kafkalistener 注释的方法的签名感到好奇,我们需要遵循什么约定吗?如果我们想通过方法注入传入一个 Spring 管理的 bean 怎么办?我试图通过方法注入将服务类传递给 kafka 侦听器 -

private fun defaultListener(payload: ByteArray, @Headers messageHeaders: MessageHeaders, ack: Acknowledgment, callbackService: CallbackService) 
 // Do something

我得到以下异常 -

org.springframework.messaging.converter.MessageConversionException: Cannot handle message; nested exception is org.springframework.messaging.converter.MessageConversionException: Cannot convert from [[B] to [com.test.kafka-demo.service.CallbackService]

如果我将依赖服务类设为 Autowired,则可以正常工作。

【问题讨论】:

你会通过类构造函数或字段来连接bean,而不是方法签名 【参考方案1】:

侦听器方法中的所有参数必须来自ConsumerRecord(或记录本身)+ 消费者和/或使用手动提交时的确认。

@Payload(或无注释)从record.value() 转换(如有必要)。

您不能在那里添加任意 bean 引用。

【讨论】:

以上是关于spring-kafka 监听器签名的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot Kafka监听器不一致

(8) KafkaListener注解

springboot集成kafka详细步骤(发送及监听消息示例)

Spring Kafka 再平衡说明

Spring Kafka - 事务回滚后重试时,通过侦听器容器事务发布消息和提交记录偏移失败

Undertow HTTPS 监听器