2016-09-13 54 views
1

我們正在使用hazelcast執行程序服務在我們的服務器集羣中分發任務。關閉本地客戶端的hazelcast exector服務

我們希望關閉其中一臺服務器並將其從羣集中取出,但允許其繼續工作一段時間以完成正在執行的操作,但不接受來自榛木執行器服務的任何新任務。

我不想關閉hazelcast實例,因爲當前任務可能需要它來完成他們的工作。

關閉hazelcast執行器服務不是我想要的。這就關閉了整個集羣的執行者。

我想繼續處理本地隊列中的任務,直到它爲空,然後關閉。

有我的方式,讓羣集中的節點繼續使用hazelcast但告訴它停止從執行服務接受新的任務?

回答

1

這並不是說很容易,但是你有成員屬性(會員:: setX的/ ::的getX),你可以設置爲信號「沒有新的任務,請」的屬性,當你提交一個任務,你要麼預選的成員來執行基於該屬性或者使用MemberSelector使用重載。

+0

這是一個很好的提示。謝謝!這在榛子裏似乎是一個缺點。我會認爲父任務不必參與決定任務可以執行的位置。不過,我想我可以用這個提示做些事情。 我的想法是使用公共提交(可贖回任務,MemberSelector memberSelector),並有成員選擇返回沒有「關停」的屬性的所有任務。執行者將隨機挑選其中一個並在那裏發送任務。 謝謝! –

+1

這裏就是我想:第一,當我知道我們要關閉我們運行該服務器:。'的getInstance()getCluster()getLocalMember()setBooleanAttribute(HAZELCAST_SHUTDOWN_KEY,真)'然後在我們的任務運行我們做到這一點: ' MemberSelector memberSelector =新MemberSelector(){ @覆蓋 公共布爾選擇(會員成員){ 回報member.getBooleanAttribute(HazelcastService.HAZELCAST_SHUTDOWN_KEY);! } }; return _executor.submit(task,memberSelector); ' 如果有任何問題,我會回覆。 –

相關問題