Java ApachePulsar阅读器仍然可以获取应该删除的消息
我是Apache Pulsar的新手,也是MQ系统的新手。现在,我有一个关于脉冲星阅读器的问题 问题描述: 我启动一个脉冲星实例,然后启动一个消费者,听一个主题a。 然后我启动一个制作人,向主题a发送100条消息,消费者消费了这100条消息,消费者订阅的Backlog值为0。主题上只有一个订阅,并且是独占的 然后,我启动一个阅读器,将阅读器的主题设置为a,阅读器可以从主题a获得消息 我在Pulsar文档上找到了这个: Pulsar代理负责处理通过Pulsar的消息,包括消息的持久存储。默认情况下,经纪人: 立即删除每个订阅中已确认的所有邮件, 并将所有未确认的消息持久存储在待办事项列表中 这100条消息应该已经被删除了。 那么为什么脉冲星阅读器仍然可以从主题A中获得信息呢 我的代码: 消费者:Java ApachePulsar阅读器仍然可以获取应该删除的消息,java,mq,apache-pulsar,Java,Mq,Apache Pulsar,我是Apache Pulsar的新手,也是MQ系统的新手。现在,我有一个关于脉冲星阅读器的问题 问题描述: 我启动一个脉冲星实例,然后启动一个消费者,听一个主题a。 然后我启动一个制作人,向主题a发送100条消息,消费者消费了这100条消息,消费者订阅的Backlog值为0。主题上只有一个订阅,并且是独占的 然后,我启动一个阅读器,将阅读器的主题设置为a,阅读器可以从主题a获得消息 我在Pulsar文档上找到了这个: Pulsar代理负责处理通过Pulsar的消息,包括消息的持久存储。默认情况
private static void consume() {
try {
PulsarClient pulsarClient = PulsarClient.builder().serviceUrl("pulsar://127.0.0.1:6650").build();
Consumer<String> consumer = pulsarClient.newConsumer(Schema.STRING)
.topic("A")
.subscriptionName("first-subscription")
.subscribe();
for (int i = 0; true; ++i) {
try {
Message<String> msg = consumer.receive();
String m = msg.getValue();
System.out.println("\t m:" + m);
consumer.acknowledge(msg);
Thread.sleep(500);
} catch (Exception e) {
LOGGER.error("", e);
}
}
} catch (Exception e) {
LOGGER.error("", e);
}
}
制作人:
private static void produce() {
try {
PulsarClient pulsarClient = PulsarClient.builder().serviceUrl("pulsar://127.0.0.1:6650").build();
Producer<String> producer = pulsarClient.newProducer(Schema.STRING).topic("A").create();
for (int i = 0; i < 100; ++i) {
producer.send("producer-simple-partitioned-" + i);
}
} catch (Exception e) {
LOGGER.error("", e);
}
}
读者:
private static void readerRead() {
try {
PulsarClient pulsarClient = PulsarClient.builder().serviceUrl("pulsar://127.0.0.1:6650").build();
Reader<byte[]> reader = pulsarClient.newReader()
.topic("A")
.startMessageId(MessageId.earliest)
.create();
while (true) {
Message message = reader.readNext();
System.out.println(new String(message.getData()));
}
} catch (PulsarClientException e) {
LOGGER.error("", e);
}
}
您在读卡器界面中体验到的行为似乎是一种可能的情况。在这种情况下,文档是不正确的,因为消息在确认后不会被明确删除。如果包含消息的分类账仍然存在,则可以读取消息 实际上,这部分文件将在以下文件中: 请注意,不再存储的消息不一定 立即删除,并且在 下一个分类账滚动。因为客户无法预测何时滚动 可能发生的情况下,依靠在某个时间没有发生的翻滚是不明智的 不方便的时间点 及 默认情况下,当脉冲星消息到达代理时,它将 存储,直到在所有订阅上确认为止,其中 该点将被标记为删除