2017-10-30 9 views
1

내구성있는 주제에 대해 jms 토픽 구독자를 작성할 때 clientId 및 subscription 이름을 설정해야한다는 것을 알고 있습니다.JMS 게시자/고객의 clientID를 설정하는 목적은 무엇입니까?

하지만 주제를 게시 할 때 clientID를 설정하는 목적은 무엇입니까? 나는 사람들이 발행인/소비자를 위해 클라이언트 ID를 설정하는 것을 보았지만 아무도 그것이 왜 필요한지 설명하지 못했습니다.

ConnectionFactory conFactory = this.getConnectionFactory(); 
Connection connection = conFactory.createConnection(); 

connection.setClientID("WHATS_MY_PURPOSE"); // Why do we need clientID while publishing the TOPIC from consumer/publisher 

connection.start(); 
MessageProducer producer = session.createProducer(destination); 

답변

2

clientId은 응용 프로그램을 고유하게 식별하는 데 필요합니다. Pub/Sub 메시징 패턴에서 영구 가입을 사용할 때 필수 항목입니다. 아시겠지만 메시징 프로 바이더는 오프라인 가입자 애플리케이션을 대상으로하는 게시를 캐시합니다. 이러한 응용 프로그램이 다시 온라인 상태가되면 메시징 공급자는 OK, this is the same application that created a durable subscription but went away for reason. Now it has come back. So let me deliver all messages that were published when this application was away을 식별해야합니다. 동일한 응용 프로그램인지 확인하기 위해 메시징 제공 업체는 응용 프로그램의 clientId과 캐시 된 구독 정보가있는 clientId을 비교합니다.

+0

여기에서 언급하는 응용 프로그램은 무엇입니까? 구독자는 내가 생각하니? clientID가 필요한 가입자에 대해서는 의문의 여지가 없습니다. 하지만 게시자에게 중요한 점은 무엇입니까? 게시자가 clientID를 가지고 있습니까? – user3007165

+0

JMS 1.1 사양에 따라 영구 가입자 응용 프로그램입니다. JMS는 API 사양이므로 일부 메시징 프로 바이더가 다른 용도로 사용할 수도 있습니다. 나는 누구도 알지 못한다. – Shashi

+0

여기 내 시나리오가 있습니다. 1. 게시자 큐에 메시지를 전송뿐만 아니라 2. 내구성 가입자가 된 ClientID와 그 메시지를 따기입니다 (ABC 말) 클라이언트 ID를 설정하는 것입니다 위 어떤 문제없이 잘 작동 (ABC 말). 게시자에서 clientID를 설정하는 것을 중지하고 구독자의 clientID 만 설정하는 경우에도 잘 작동합니다. 예; 아래의 상황도 잘 작동하고 문제를 일으키지 않습니다. 1. 게시자가 clientID를 설정하지 않고 대기열에서 메시지를 보내고 있습니다. 2. 영구 가입자가 clientID (예 : ABC)로 해당 메시지를 선택합니다. – user3007165