Google cloud platform 为什么PubSub在确认消息时重新发送消息?

Google cloud platform 为什么PubSub在确认消息时重新发送消息?,google-cloud-platform,google-cloud-pubsub,Google Cloud Platform,Google Cloud Pubsub,我有一个简短的项目,我推送了许多消息(~1000),然后我尝试在一个线程上处理它们,但我仍然收到重复的消息 这是PubSub想要的行为吗 这是创建订阅服务器的代码 ExecutorProvider executorProvider = InstantiatingExecutorProvider.newBuilder().setExecutorThreadCount(1).build(); // create subscriber subscrib

我有一个简短的项目,我推送了许多消息(~1000),然后我尝试在一个线程上处理它们,但我仍然收到重复的消息

这是PubSub想要的行为吗

这是创建订阅服务器的代码

    ExecutorProvider executorProvider =
            InstantiatingExecutorProvider.newBuilder().setExecutorThreadCount(1).build();

    // create subscriber
    subscriber = Subscriber.newBuilder(subscriptionName, messageReceiver).setExecutorProvider(executorProvider).build();
    subscriber.startAsync();
以下是演示:

我推送了1000条消息,每个进程花费300毫秒(故意添加延迟),然后调用了ack()。订阅的确认时间为10基于所有这些,我不应该收到重复的邮件,但我已经收到了超过10%的邮件。

以下是日志:


我在

上添加了相同的问题,只是在PubSub文档中仔细观察了一下,我发现了以下部分:

但是,消息有时可能会无序发送或多次发送。一般来说,在处理消息时,允许多次传递要求订阅者是幂等的。您可以使用云数据流PubsubIO实现对云发布/订阅消息流的一次处理。PubsubIO在自定义消息标识符或由云发布/订阅分配的标识符上消除重复消息

在我的例子中,
云数据流PubsubIO
是关键

或者使用
唯一ID
并在客户端执行重复数据消除:)