Skip to content

@RetryableTopic not working for asynchronous @KafkaListener return types #3276

Closed
@matthiasValuecloud

Description

@matthiasValuecloud

In what version(s) of Spring for Apache Kafka are you seeing this issue?

3.2.0

Describe the bug

When using the @RetryableTopic annotation on a Listener that returns a CompletableFuture, no retry or dlt events are sent when the CompletableFuture completes with an exception.

To Reproduce

@RetryableTopic(
            attempts = "5",
            kafkaTemplate = "retryTemplate",
            autoCreateTopics = "false",
            backoff = @Backoff(delay = 6000)
    )
@KafkaListener(
        topics = "my-test-topic",
        properties = {
                "key.deserializer=io.confluent.kafka.serializers.KafkaAvroDeserializer",
                "value.deserializer=io.confluent.kafka.serializers.KafkaAvroDeserializer",
                "specific.avro.reader=true"
        },
        id = "myId"
)
public CompletableFuture<Void> receive(ConsumerRecord<Key, Value> record) {
    log.info("Received request (id {}) on topic {}", record.key().getId(), record.topic());

    CompletableFuture<Void> result = processor.process(record.key(), record.value());
    result.whenComplete((v, ex) -> {
       if (ex != null) {
           log.error("Error processing request: {}", ex.getMessage());
       }
    });
    return result;
}

Expected behavior

A CompletableFuture, which results in an exception, should be retried with the given properties and marked for ack on my-topic.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions