2017-04-13 69 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有關於此方法的更多信息。