spring-projects / spring-kafka

Provides Familiar Spring Abstractions for Apache Kafka
https://projects.spring.io/spring-kafka
Apache License 2.0
2.14k stars 1.54k forks source link

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

Open matthiasValuecloud opened 3 months ago

matthiasValuecloud commented 3 months ago

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.

sobychacko commented 3 months ago

@matthiasValuecloud This is not a bug, but something we never added as a feature for non-blocking retries with async KafkaListener methods. We can try to make it in before the next releases, but any PR contributions are welcome. Thanks!

matthiasValuecloud commented 2 months ago

Well i can try, but i am really not comfortable around such a huge project and how to contribute properly. I will read through the guidelines and see what i can do :D

sobychacko commented 2 months ago

@matthiasValuecloud Sounds good. Please let us know if you end up working on it. Here are the contribution guidelines: https://github.com/spring-projects/spring-kafka/blob/main/CONTRIBUTING.adoc.

matthiasValuecloud commented 2 months ago

Haven't had the chance on working on it so far. I apologize.

artembilan commented 1 month ago

Moving to Backlog since we haven't have a chance to look into this.