Pubsub 拉取订阅和并发

Pubsub pull subscriptions and concurrency

我正在从推送订阅转向拉取订阅,并且我已经阅读了 Google 关于 pubsub 并发的文档。他们的示例使用执行器来订阅主题。这被配置为有 4 个线程,默认为 1 个 puller(因此 2 个 puller 将使用 8 个线程)。当我 startAsync 时,我认为客户端打开了一个流式拉取,它可能会保持打开状态一段时间(也许)。我的问题是,每个订阅是否有 1 个执行程序,或者所有订阅是否有一个执行程序(因此有一个线程池)。我有大约 200 个订阅,所以 4 个线程 x 200 听起来不对。那怎么调呢?我是否只是从一个具有 10 个线程的 Executor 开始处理所有订阅和负载测试?如果有人对此有经验,很高兴听到您的想法。

默认情况下,Subscriber 的每个实例都有自己的 executorProvidersystemExecutorProvider,它们会创建多个线程。前者的默认创建 5 threads and for the latter creates max(6, parallelPullCount) threads.

可以通过 Subscriber.Builder.setExecutorProvider and Subscriber.Builder.setSystemExecutorProvider methods. You could provide the same ExecutorProvider to them, e.g. a FixedExecutorProvider.

设置这些提供程序来覆盖此行为

但是,如果您打算在同一作业中从 200 个订阅中提取消息,那么如果可以的话,最好使用 push subscriptions。您将在您的作业中设置一个 https 端点,并将所有 200 个订阅上的推送端点设置到同一端点。所有消息都可以通过相同的代码路径进行处理,并且您不会有每个消息的 Subscriber 实例的开销。