Dezhi, Thank you for sharing this proposal. I have added this proposal to PIP-58 ( https://github.com/apache/pulsar/wiki/PIP-58-:-Support-Consumers--Set-Custom-Retry-Delay ).
+1 for this proposal since it is extending the capability of dead letter policy. Thanks, Sijie On Wed, Feb 26, 2020 at 7:05 AM dezhi liu <liudezhi2...@gmail.com> wrote: > Hi all, > > Here is a suggest (PIP) on consumers can set custom retry delay when > consumer fail. > > > ------------ > > > PIP 58 : 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 >