【问题标题】:Google pubsub flow control谷歌发布订阅流控制
【发布时间】:2017-06-28 21:35:37
【问题描述】:

我正在尝试实施一项服务,该服务以自己的节奏使用 google pubsub 订阅。这样,我的意思是我需要对何时需要使用消息进行精细控制,即获取一批消息,暂停一段时间,不要收到超过 X 条消息...

使用谷歌客户端库我没有找到方法,因为 MessageReceiver 在它自己的线程中运行,我无法控制到底发生了什么。

基本上,能够以同步方式使用消息应该可以解决我的问题。

你知道如何同步使用谷歌客户端库吗?还是我错过了 API 中的另一种方式?

【问题讨论】:

    标签: java google-cloud-pubsub google-client


    【解决方案1】:

    您可以在构建订阅者时尝试使用setFlowControlSettings。特别是,您可以使用setMaxOutstandingElementCountsetMaxOutstandingRequestBytes 来限制发送到您的MessageReceiver 的消息。当您有足够的未处理消息(即您尚未调用 Ack()Nack() 的消息以超出这些限制时,则在消息被确认或确认之前不会调用您的 MessageReceiver。

    【讨论】:

    • 我同意你的观点,我今天早些时候尝试过,但这并不能解决我的所有问题。例如,如何在不执行 stopAsync 的情况下暂停消息的检索?我还需要在最多 Y 秒的时间范围内处理最多 X 条消息。
    • 如果您需要更严格的控制级别,则需要直接使用 gRPC 或 REST 库。 service APIs overview 有更多信息。
    • 这是我想避免的路线,但我想我别无选择。
    • 这只是每个客户,对吧?它不会在多个客户端的订阅之间共享该限制吗?你知道这是否可能吗?
    • 限制不跨客户端共享,不,它们是按客户端放置的。无法在多个客户端上的多个订阅之间共享限制。
    猜你喜欢
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 2019-04-24
    • 2018-07-17
    • 2023-01-01
    • 1970-01-01
    • 2016-10-23
    • 2018-01-31
    相关资源
    最近更新 更多