繁体   English   中英

Acknowledgement.acknowledge() 在 spring-kafka @KafkaListener 中抛出异常

[英]Acknowledgement.acknowledge() throwing exception in spring-kafka @KafkaListener

当我将 enable.auto.commit 设置为 false 并尝试使用基于注解的 spring-kafka @KafkaListener 手动提交偏移量时,我得到一个org.springframework.kafka.listener.ListenerExecutionFailedException: Listener 方法无法使用传入消息调用

我有一个非常简单的代码如下:

@KafkaListener(id = "someid", topics = "${demo.topic}", containerFactory = "someContainerFactory")
public void listenFooGroup(String message, Acknowledgement ack) {
    System.out.println("Received Messasge in group 'foo': " + message);

    // TODO: Do something with the message
}

当我从生产者发送消息时,我收到以下异常:

org.springframework.kafka.listener.ListenerExecutionFailedException:无法使用传入消息调用侦听器方法。

端点处理程序详细信息:

方法[public void com.****.*****.*******.KafkaMessageListener.listenFooGroup(java.lang.String,org.springframework.kafka.support.Acknowledgment)]

豆 [com.****.*****.*******.KafkaMessageListener@5856dbe4]; 嵌套异常是 org.springframework.messaging.converter.MessageConversionException:无法处理消息; 嵌套异常是 org.springframework.messaging.converter.MessageConversionException:无法从 [java.lang.String] 转换为 [org.springframework.kafka.support.Acknowledgment] for GenericMessage [payload=test, headers={kafka_offset=57, kafka_receivedMessageKey =null, kafka_receivedPartitionId=0, kafka_receivedTopic=demotopic}], failedMessage=GenericMessage [payload=test, headers={kafka_offset=57, kafka_receivedMessageKey=null, kafka_receivedPartitionId=0, kafka_receivedPartitionId=0, kafkafka}_recemo

请帮忙。 TIA。

您必须将容器工厂的containerProperties ackMode 设置为MANUALMANUAL_IMMEDIATE以获取Acknowledgment对象。

对于其他 ack 模式,容器负责提交偏移量。

factory.getContainerProperties().setAckMode(AckMode.MANUAL_IMMEDIATE)

如果使用 Spring Boot,或者设置....ackMode属性

@Gary Russell您能说出Spring Boot的确切解决方案吗?我在Spring Boot应用程序中也遇到了同样的异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM