一次只提取一条消息

时间:2017-04-13 09:23:23

标签: java google-cloud-pubsub

我目前面临的问题是我想要实现一个简单的主从模式,其中主服务器通过将所有作业从一开始发布到主题来初始化作业队列。每当他们有自由工作能力时,奴隶就会把这些工作拉出来,通过一次拉一个工作来实现拉动。示例代码on github中的代码会在特定时间内提取多条消息

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

我不想要那个,我只想从队列中拉出一个工作消息,让奴隶完成工作,工作完成后,调用pull方法来拉取另一个工作消息,但一次只能一个。因为我在ExecutorService中执行作业,所以如果我的线程池已经填满,我想确保我不会提取任何消息。我如何实现拉取一条消息,将该作业填入我的ExecutorService并仅拉下一个作业消息,如果有一个作业完成,一个线程没有工作?

1 个答案:

答案 0 :(得分:0)

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

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