取消确定后重新投递的时间不太精确不知道怎么回事

@Component
public class MyMessageListener1 implements MessageListener {
    @Override
    public void received(Consumer consumer, Message msg) {
        try {
            String messageValue = new String(msg.getData());
            System.out.print(System.currentTimeMillis() + " MyMessageListener1=" + messageValue);
            if (!messageValue.equals("我是消息4")) {
                consumer.acknowledge(msg);
                System.out.println();
            } else {
                consumer.negativeAcknowledge(msg);
                System.out.println(",执行negativeAcknowledge取消确认操作!");
            }
        } catch (PulsarClientException e) {
            throw new RuntimeException(e);
        }
    }
}

我设置nack重投时间为3秒了

    @Bean
    public Consumer createPulsarConsumer_myTopic1() throws PulsarClientException {
        Consumer consumer = pulsarClient.newConsumer().topic(myTopic1).subscriptionName(myTopic1_subscriptionName).messageListener(myMessageListener1).subscriptionType(SubscriptionType.Exclusive).negativeAckRedeliveryDelay(3, TimeUnit.SECONDS).subscribe();
        return consumer;
    }
1666844202715 MyMessageListener1=我是消息4,执行negativeAcknowledge取消确认操作!
1666844206710 MyMessageListener1=我是消息4,执行negativeAcknowledge取消确认操作!
1666844210807 MyMessageListener1=我是消息4,执行negativeAcknowledge取消确认操作!
1666844214801 MyMessageListener1=我是消息4,执行negativeAcknowledge取消确认操作!
1666844218792 MyMessageListener1=我是消息4,执行negativeAcknowledge取消确认操作!
1666844222786 MyMessageListener1=我是消息4,执行negativeAcknowledge取消确认操作!
1666844226720 MyMessageListener1=我是消息4,执行negativeAcknowledge取消确认操作!
1666844230722 MyMessageListener1=我是消息4,执行negativeAcknowledge取消确认操作!
1666844234728 MyMessageListener1=我是消息4,执行negativeAcknowledge取消确认操作!
1666844238760 MyMessageListener1=我是消息4,执行negativeAcknowledge取消确认操作!
1666844242819 MyMessageListener1=我是消息4,执行negativeAcknowledge取消确认操作!

发现重新投递的时间不是3秒,而是4秒左右,这差1秒不知道pulsar做什么工作,感觉投递的时间也不需要用时1秒,我在局域网测试的。
还是这个重新投递的时间是“大约是3秒”。
感谢。

设置 3s,ticket time 默认正好算成 1s 了。应该是这个原因。相当于现在 NegativeAcksTracker 是一个低精度的控制。delay 时间越长精度约低。

辉哥,那意思我的情况是正常的了?是吧,也就是在一个大体的时间会重投,是吧。

@codelipenghui

嗯嗯是的。如果对精确重新投递时间有要求,其实可以把 NegativeAcksTracker 的 tick time 考虑暴露出来。这样能满足更多的使用场景。