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

我尝试在 stackoverflow 上搜索此内容,但找不到合理的答案。我对使用@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,而不是方法签名

标签: spring-boot kotlin apache-kafka spring-kafka


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    • 2021-03-11
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    • 2017-12-01
    • 2022-01-12
    相关资源
    最近更新 更多