【问题标题】:Pulling just one message at a time一次只提取一条消息
【发布时间】:2017-04-13 09:23:22
【问题描述】:

我目前面临的问题是我想实现一个简单的主从模式,其中主通过将所有作业从开头发布到主题来初始化作业队列。奴隶每有空闲的工作能力就会拉动那些工作,拉动就是一次拉动一个工作。示例代码 on github 中的代码在特定时间拉取多条消息

subscriber.startAsync().awaitRunning();
Thread.sleep(params.y());

我不想这样,我只想从队列中拉出一条作业消息,让从机完成工作,工作完成后,调用拉取方法来拉另一条作业消息,但一次只能拉一条。由于我在 ExecutorService 中执行作业,因此如果我的线程池已满,我想确保我不会拉任何消息。我如何实现拉一条消息,将该作业填充到我的 ExecutorService 中,并且只拉下一条作业消息,如果有一个工作完成,并且一个线程没有工作?

【问题讨论】:

    标签: java google-cloud-pubsub


    【解决方案1】:

    一次提取一条消息将被视为 Google Cloud Pub/Sub 的反模式。您可以通过Subscriber Builder 指定FlowControlSettings 来控制传递给您的工作人员的消息数量。特别是,您可以在 FlowControlSettings Builder 上调用 setMaxOutstandingElementCount 来限制已传递到您提供的 MessageReceiver 的最大消息数。如果您的每个工作人员都是单独的订阅者并希望一次执行一个操作,您甚至可以将此数字设置为 1。

    如果您需要更准确地控制订阅者的拉取语义,则可以直接使用gRPC library's pull methodSerivce APIs Overview 有更多关于这种方法的信息。

    【讨论】:

      猜你喜欢
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 2018-01-03
      • 1970-01-01
      • 2017-01-02
      • 2011-04-04
      • 2015-11-10
      • 2016-11-12
      相关资源
      最近更新 更多