Enable.auto.commitをfalseに設定し、アノテーションベースのspring-kafka @KafkaListenerを使用して手動でオフセットをコミットしようとすると、org.springframework.kafka.listener.ListenerExecutionFailedException:リスナーメソッドを呼び出すことができませんでした着信メッセージ
私は次のような非常に単純なコードを持っています:
@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:着信メッセージでリスナーメソッドを呼び出すことができませんでした。
エンドポイントハンドラの詳細:
メソッド[publicvoidcom。****。*****。*******。KafkaMessageListener.listenFooGroup(Java.lang.String、org.springframework.kafka.support.Acknowledgment)]
Bean [com。****。*****。*******。KafkaMessageListener @ 5856dbe4];ネストされた例外はorg.springframework.messaging.converter.MessageConversionExceptionです:メッセージを処理できません。ネストされた例外はorg.springframework.messaging.converter.MessageConversionExceptionです:GenericMessage [payload = test、headers = {kafka_offset = 57、kafka_receivedMessageKey]の[Java.lang.String]から[org.springframework.kafka.support.Acknowledgment]に変換できません= null、kafka_receivedPartitionId = 0、kafka_receivedTopic = demotopic}]、failedMessage = GenericMessage [payload = test、headers = {kafka_offset = 57、kafka_receivedMessageKey = null、kafka_receivedPartitionId = 0、kafka_receivedTopic = demotopic}]
助けてください。 TIA。
containerProperties
オブジェクトを取得するには、コンテナファクトリのMANUAL
ackModeをAcknowledgment
またはMANUAL_IMMEDIATE
に設定する必要があります。
他のackモードでは、コンテナはオフセットをコミットする責任があります。
factory.getContainerProperties().setAckMode(AckMode.MANUAL_IMMEDIATE)
または、Spring Bootを使用している場合は、....ackMode
プロパティを設定します