Google PubSub 每次拉取的最大消息数
Posted
技术标签:
【中文标题】Google PubSub 每次拉取的最大消息数【英文标题】:Google PubSub maximum number of messages per pull 【发布时间】:2018-08-10 01:50:38 【问题描述】:我正在编写一个 ASP .NET Core 应用程序,我在其中使用 Google PubSub 模拟器,我可以在其中发布和订阅主题。但是,当我发布“大量”消息 1000+ 时,我想尽可能多地拉取。
我使用提供SubscriberServiceApiClient
的Google.Cloud.PubSub.V1
库与他们的API 进行交互。我使用具有参数maxMessages
的PullAsync
方法异步拉取。根据他们的文档,这决定了每个请求可以提取的最大消息数,但它可能返回更少。如果我提供一个参数来指定一个大于 100 的 maxMessages
数字,它不会有任何区别。这意味着我可以从每个请求中接收的最大消息数始终为 100,这似乎很低。我还尝试通过他们的 REST Api 拉取,每次拉取也限制为 100 条消息。
我不确定这是由于某些限制还是我做错了什么。我曾尝试在他们的文档和其他地方搜索,但没有运气。
【问题讨论】:
【参考方案1】:一般而言,Google Cloud Pub/Sub 不能向单个 PullAsync
调用返回超过 1000 条消息。通过模拟器运行时,这可能会更小。 returnImmediately
的值也会影响返回的消息数量。如果您想最大化返回的消息数量,那么您需要将returnImmediately
设置为false
。但是,即使在这种情况下,您也不一定会在每个响应中得到maxMessages
; Cloud Pub/Sub 尝试在返回更完整的响应与通过等待太久来最小化端到端延迟之间取得平衡。
一般来说,为了最大限度地提高吞吐量,您需要同时激活多个 PullAsync
调用。但是,更好的是使用SubscriberClient
,它会在后台为您处理底层请求,并在消息到达时将消息传递给您指定的函数。
【讨论】:
【参考方案2】:在 2019 年 11 月,消息数量上限仍为 1000 条。Pubsub 不允许一次获取更多消息。如下图所示,我尝试循环拉取消息,一次 1,000 条。在一半的请求中,它获得的消息数量远远少于最大消息量。在 Cloud Function 的最大运行时间 9 分钟内,我设法提取了大约 50,000 条消息。
另一种解决方案是使用 google.cloud.pubsub_v1.SubscriberClient.subscribe() 异步订阅 pubsub 主题。但是,此解决方案更适合长时间运行的进程,您可以将其描述为一种位于服务器上的收集器。
【讨论】:
以上是关于Google PubSub 每次拉取的最大消息数的主要内容,如果未能解决你的问题,请参考以下文章
Google PubSub Pull 与 Streaming Pull 的区别
Google Cloud PubSub 在异步拉取消息时抛出 504 Deadline Exceeded 错误