Hi all,
Here is a suggest (PIP) on consumers can set custom retry delay when consumer fail. ------------ PIP : Support Consumers Set Custom Retry Delay ## Motivation For many online business systems, various exceptions usually occur in business logic processing, so the message needs to be re-consumed, but users hope that this delay time can be controlled flexibly. The current user's processing method is usually to send this message to a special retry topic, because production can specify any delay, so consumers subscribe the business topic and retry topic at the same time. I think this logic can be supported by pulsar itself, making it easier for users to use, and it looks like this is a very common requirement. ## Proposed changes This change can be supported on the client side, need to add a set of interfaces to org.apache.pulsar.client.api.Consumer ```java void reconsumeLater(Message<?> message, long delayTime, TimeUnit unit) throws PulsarClientException; CompletableFuture<Void> reconsumeLaterAsync(Message<?> message, long delayTime, TimeUnit unit); CompletableFuture<Void> reconsumeLaterAsync(Messages<?> messages, int delayLevel); CompletableFuture<Void> reconsumeLaterCumulativeAsync(Message<?> message, long delayTime, TimeUnit unit); ``` DeadLetterPolicy add retry topic ```java public class DeadLetterPolicy { /** * Maximum number of times that a message will be redelivered before being sent to the dead letter queue. */ private int maxRedeliverCount; /** * Name of the retry topic where the failing messages will be sent. */ private String retryLetterTopic; /** * Name of the dead topic where the failing messages will be sent. */ private String deadLetterTopic; } ``` org.apache.pulsar.client.impl.ConsumerImpl add a retry producer ```java private volatile Producer<T> deadLetterProducer; private volatile Producer<T> retryLetterProducer; ``` Can specify whether to enable retry when creating a consumer??default unenable ```java @Override public ConsumerBuilder<T> enableRetry(boolean retryEnable) { conf.setRetryEnable(retryEnable); return this; } ``` ------------ Thanks, Dezhi