2017-04-13 125 views
1

我目前面临的问题是,我想实现一个简单的主从模式,其中主服务器通过将所有作业从开头发布到主题来初始化作业队列。奴隶们每次拥有自由工作能力时都会从事这些工作,一次拉一份工作就可以实现拉动。从示例代码on github代码拉动多个消​​息的具体时间一次只提取一条消息

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

我不希望出现这种情况,我只是想从队列中拉出一个作业的消息,让奴隶做的工作,工作完成后, ,调用拉动方法来拉另一个工作信息,但一次只能一个。因为我在ExecutorService中执行作业,所以我想确保我不会提取任何消息,如果我的线程池已被填充。我如何才能实现拉一条消息,将这个工作填充到我的ExecutorService中,并且只需要下一个工作消息,如果有工作完成,并且线程没有工作?

回答

0

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

如果您需要更精确地控制用户的拉语义,则可以直接使用gRPC library's pull methodSerivce APIs Overview有关于此方法的更多信息。