2013-04-25 4 views
0

여러 주제의 소비자 메시지를 작성하고 메시지를 변형 한 다음 여러 주제로 게시 할 수있는 애플리케이션을 구축 중입니다. ConnectionFactory에 객체를 검토 한 결과,이 코드다중 스레드 환경에서 클라이언트 ID와 구독 이름이 고유하게 만드는이 접근 방식은 작동합니까?

Connection con = cf.createConnection(); 
String clientId = "APP"+ con.hashCode(); 
con.setClientId(clientId); 

를 사용하고 내구성 subscribtion를 만드는 동안 나는이 MessageConsumer 소비자 = session.CreateDurableSubscriber 사용하고 있습니다 (주제를, "DurableSubscribtion"+ 된 ClientID, topic.getSelector, TRUE);

모든 연결에는 클라이언트 ID와 가입 이름이 있어야합니다.

연결이 닫히고 새로 만든 연결의 hashCode를 사용하여 동일한 구독에 다시 액세스하려고하면이 접근 방식이 작동합니까? 또는 SUBSCRIBER1, SUBSCRIBER3, SUBSCRIBER2와 같은 subscriptionsnames를 지정해야합니까?

답변

0

그래, 다음 번에 동일한 클라이언트 ID를 표시 할 수 있도록 "반복 가능한"클라이언트 ID를 지정해야합니다. 그렇지 않으면, 당신은 부하 (Integer.MAX_VALUE 가능하면?)를 만들어서 모두 죽을 것입니다.

의미있는 명명 체계를 고안해야합니다. 예를 들어 주제당 구독자가있는 경우 클라이언트 이름을 < topic_name> + "durSub-Admin" 또는 무언가로 지정하십시오.

ActiveMQ를 사용하는 경우 계정이 VirtualTopics 일 때 조금 더 쉽습니다.

+0

감사합니다. Nicholas – user2320250