Google cloud platform 为什么PubSub在确认消息时重新发送消息?
我有一个简短的项目,我推送了许多消息(~1000),然后我尝试在一个线程上处理它们,但我仍然收到重复的消息 这是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
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
并在客户端执行重复数据消除:)