2016-09-13 5 views
1

우리는 hazelcast 실행 프로그램을 사용하여 서버 클러스터 전체에 작업을 배포합니다.hazelcast exector 서비스의 로컬 클라이언트를 종료합니다.

우리 서버 중 하나를 종료하고 클러스터에서 꺼내지 만 일정 기간 동안 작업을 계속할 수는 있지만 헤이즐 캐스팅 실행자 서비스의 새로운 작업은 허용하지 않습니다.

현재 작업에서 작업을 완료해야하기 때문에 hazelcast 인스턴스를 종료하고 싶지 않습니다.

hazelcast 실행 프로그램 서비스를 종료하는 것은 내가 원하는 것이 아닙니다. 그러면 집행자가 클러스터 전체에서 종료됩니다.

비어 있고 종료 될 때까지 로컬 대기열에서 작업을 계속 처리하고 싶습니다.

클러스터의 노드가 지속적으로 hazelcast를 사용하도록하지만, 실행자 서비스에서 새 작업을 수락하지 않도록 지시하는 방법이 있습니까?

답변

1

그러나 쉬운 것은 아니지만 구성원 특성 (Member :: setX/:: getX)이 있으며 "새로운 작업 없음"을 알리는 특성을 설정할 수 있으며 작업을 제출할 때 실행할 멤버를 미리 선택하거나 on 속성을 사용하거나 MemberSelector와 함께 오버로드를 사용합니다.

+0

이것은 좋은 힌트입니다. 감사! 이것은 hazelcast의 단점이있는 것 같습니다. 부모 작업은 작업을 실행할 수있는 위치를 결정할 필요가 없습니다. 그러나 나는이 힌트로 뭔가를 할 수 있다고 생각한다. 내 생각은 public submit (호출 가능 작업, MemberSelector memberSelector)를 사용하고 멤버 선택자가 "종료 중"속성이없는 모든 작업을 반환하도록하는 것입니다. 집행 인은 이들 중 하나를 무작위로 고르고 거기에 과제를 보냅니다. 감사합니다. –

+1

여기 내가 무엇을하려고하는지 알면 : 먼저, 우리가 서버를 종료하기를 원할 때'getInstance(). getCluster(). getLocalMember(). setBooleanAttribute (HAZELCAST_SHUTDOWN_KEY, true)'그런 다음 우리의 작업 주자에서 우리는 이 작업을 수행 : ' MemberSelector memberSelector = 새로운 MemberSelector() { @Override 공공 부울 (회원 회원) { 반환을 선택 member.getBooleanAttribute (HazelcastService.HAZELCAST_SHUTDOWN_KEY를)! } }; return _executor.submit (task, memberSelector); ' 문제가 있으면 다시 게시 해 드리겠습니다. –