2013-04-01 3 views
1

작업 실행 중 로컬 hazelcast 멤버를 찾는 방법을 찾고 있습니다. 2.5-SNAPSHOT 버전입니다. 튜토리얼에서 미리보기가 작동하지 않는 것 : 지금은 사용되지 않습니다Hazelcast : 분산 된 실행 및 로컬 멤버 정보

public class Echo implements Callable<String>, Serializable { 
    public String call() { 
     return Hazelcast.getCluster().getLocalMember().toString() + ":" + input; 
    } 
} 

getCluster를 호출()가 생성되고 연결되는 새 멤버 트리거합니다.

현재로서는 HazelcastInstance.getCluster(). getLocalMember()를 통해 가져올 수 있었지만이 은 이런 종류의 주입으로 내 전화를 복잡하게 만들지 않으려 고합니다.

로컬 회원을 검색하는 적절한 방법을 제안 해주시겠습니까?

+0

적절한 방법은 로컬 부재를 조회 할 수 없습니다. 왜 그럴 필요가있는거야? – eis

+0

알맞은 질문입니다. 일반적으로 나는 이것을해서는 안됩니다. 아이디어는 라이트 멤버 만 작업을 실행하는 것입니다. 핵심 소유권 사업이 여기서 효과가 있을지 확신하지 못합니다. 나는 deprecated 메서드 호출에서 생성 된 새 멤버와 혼동을 겪었으므로 올바른 방법이 존재한다고 생각했지만 다른 점이 있습니다. 어쨌든 클러스터 객체를 통해 얻은 멤버 집합을 사용하여 작업을 예약 할 수 있습니다. –

답변

5

호출 가능 객체는 HazelcastInstanceAware를 구현해야합니다.

여기서 예 :

public class EchoExample { 

    public static void main(String[] args) throws ExecutionException, InterruptedException { 
     Config config = new Config(); 
     HazelcastInstance instance1 = Hazelcast.newHazelcastInstance(config); 
     HazelcastInstance instance2 = Hazelcast.newHazelcastInstance(config); 
     ExecutorService executorService = instance1.getExecutorService("exec1"); 
     Future<String> future = executorService.submit(new Echo()); 
     System.out.println(future.get()); 

    } 

    static class Echo implements HazelcastInstanceAware, Serializable, Callable<String> { 
     transient HazelcastInstance localInstance; 

     public String call() throws Exception { 
      return localInstance.toString(); 
     } 

     @Override 
     public void setHazelcastInstance(HazelcastInstance hazelcastInstance) { 
      this.localInstance = hazelcastInstance; 
     } 
    } 

} 
+0

훌륭함! 예상대로 작동합니다. 고맙습니다! 나는 문서에서 이것을 어떻게 놓쳤는가? 아마도 관심이 없기 때문일 것입니다. 아니면 머리글이없는 단 한 줄의 문장 만 있기 때문입니까? :) http://hazelcast.com/docs/2.5/manual/single_html/#ExecutorService –