Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
matthiasValuecloud opened this issue May 23, 2024 · 3 comments

Comments

@matthiasValuecloud
Copy link

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
Copy link
Contributor

@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
Copy link
Author

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
Copy link
Contributor

@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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants