Java Message Service 사양에서는 브로커가 클라이언트를 대신하여 지속성 상태를 유지해야 할 때마다 연결이 고유한 클라이언트 식별자를 제공하도록 규정합니다. Message Queue는 이러한 클라이언트 식별자를 사용하여 주제 대상에 대한 영구 가입자를 추적합니다. 영구 가입자가 비활성 상태인 경우 브로커는 주제에 대한 모든 수신 메시지를 보관했다가 가입자가 다시 활성화되면 전달합니다. 브로커는 클라이언트 식별자로 가입자를 식별합니다.
클라이언트 응용 프로그램이 연결 객체의 setClientID 메소드를 사용하여 프로그래밍 방식으로 고유의 클라이언트 식별자를 설정할 수 있지만, 각 식별자가 고유하도록 클라이언트 식별자를 조정하기는 어렵습니다. 일반적으로는 클라이언트를 대신하여 연결을 생성하는 경우 Message Queue에서 고유한 식별자를 자동으로 할당하게 하는 편이 더 좋습니다. 그러기 위해서는 연결 팩토리의 imqConfiguredClientID 속성을 다음 형식의 값으로 설정하면 됩니다.
${u}factoryID
${u} 문자는 속성 값의 처음 네 문자여야 합니다. 중괄호 안에 u 이외의 문자를 지정할 경우 연결 생성 시 예외가 발생하게 됩니다. 이러한 문자가 다른 위치에서 사용되는 경우에는 특별한 의미 없이 일반 텍스트로 간주됩니다. factoryID의 값은 연결 팩토리 객체와 관련된 고유 문자열입니다.
특정 클라이언트에 대한 연결을 생성하는 경우 Message Queue는 ${u} 문자를 u:userName으로 바꾸어 클라이언트 식별자를 구성합니다. 여기서 userName은 연결 인증에 사용되는 사용자 이름입니다. 따라서 해당 연결 팩토리가 생성한 연결은 다른 모든 측면에서는 동일하더라도 각 연결마다 고유한 클라이언트 식별자를 갖게 됩니다. 예를 들어, 사용자 이름이 Calvin이고 연결 팩토리의 imqConfiguredClientID 속성에 대해 지정된 문자열이 ${u}Hobbes이면 지정된 클라이언트 식별자는 u:CalvinHobbes가 됩니다.
두 클라이언트가 모두 기본 사용자 이름 guest를 사용하여 연결을 시도하는 경우에는 각 클라이언트마다 동일한 ${u} 구성 요소를 가진 클라이언트 식별자를 갖게 되므로 이 방법이 적용되지 않습니다. 이 경우, 연결을 요청한 첫 번째 클라이언트만 연결됩니다. Message Queue에서 클라이언트 식별자가 동일한 두 개의 연결을 생성할 수는 없으므로 두 번째 클라이언트의 연결 시도는 실패하게 됩니다.
imqConfiguredClientID를 사용하여 클라이언트 식별자를 지정한 경우에도 클라이언트 응용 프로그램은 setClientID 연결 메소드를 사용하여 이 설정을 무시할 수 있습니다. 연결 팩토리의 imqDisableSetClientID 속성을 true로 설정하면 이 작업을 막을 수 있습니다. 영구 가입자를 사용하는 응용 프로그램의 경우에는 imqConfiguredClientID를 사용한 관리 방식이나 setClientID를 사용한 프로그램 방식으로 클라이언트 식별자를 설정해야 합니다.