Sun Java System Message Queue 3.7 UR1 관리 설명서

연결 팩토리 속성

클라이언트 응용 프로그램에서는 연결 팩토리 관리 대상 객체를 사용하여 메시지를 브로커와 교환하는 데 사용할 연결을 만듭니다. 연결 팩토리의 속성은 생성되는 모든 연결의 등록 정보를 정의합니다. 연결이 만들어지고 나면 등록 정보를 변경할 수 없습니다. 따라서 연결 등록 정보를 구성하는 유일한 방법은 연결을 만드는 데 사용되는 연결 팩토리의 속성을 설정하는 것입니다.

Message Queue는 두 종류의 연결 팩토리 객체를 정의합니다.

두 종류 모두 자원, 성능 및 메시지 처리량을 최적화하는 데 사용할 수 있는 동일한 구성 속성을 공유합니다. 이러한 속성은 16 장, 관리 객체 속성 참조에 나열되어 있으며 다음 절에서 설명합니다.

연결 처리

연결 처리 속성은 연결할 브로커 주소를 지정하고, 필요한 경우 연결 실패를 찾아내어 재연결을 시도하는 방법을 지정합니다. 이러한 속성은 표 16–1에 요약되어 있습니다.

브로커 주소 목록

가장 중요한 연결 처리 속성은 imqAddressList로서, 이 속성은 브로커 또는 연결을 설정할 브로커를 지정합니다. 이 속성의 값은 하나의 브로커 주소 또는 (브로커 클러스터의 경우) 쉼표로 구분된 여러 주소를 포함하는 문자열입니다. 브로커 주소는 사용할 연결 서비스( 연결 서비스 참조)와 연결 설정 방법에 따라 다양한 주소 지정 체계를 사용할 수 있습니다.

이러한 주소 지정 체계는 표 16–2에 요약되어 있습니다.

각 브로커 주소의 일반 형식은 다음과 같습니다.

scheme://address

여기서 scheme은 위에 나열된 주소 지정 체계 중 하나이며 address는 브로커 주소 자체를 나타냅니다. 표 16–2의 마지막 열에 표시된 대로, 주소를 지정하는 정확한 구문은 주소 지정 체계에 따라 다릅니다. 표 16–3에서는 다양한 주소 형식의 예를 보여줍니다.

다중 브로커 클러스터 환경의 주소 목록에는 두 개 이상의 브로커 주소가 포함될 수 있습니다. 첫 번째 연결 시도가 실패하면 Message Queue 클라이언트 런타임에서 목록에 있는 다른 주소로 연결을 시도하며, 연결되지 않은 경우 목록의 마지막 항목에 이를 때까지 계속 시도합니다. 두 개의 추가 연결 팩토리 속성이 이러한 연결 시도 방법을 제어합니다.

자동 재연결

연결 팩토리의 imqReconnectEnabled 속성을 true로 설정하면 연결에 실패한 경우 클라이언트가 브로커에 자동으로 다시 연결할 수 있습니다. imqReconnectAttempts 속성은 지정된 브로커 주소에 대한 재연결 시도 횟수를 제어하고, imqReconnectInterval 속성은 시도 간격(초)을 지정합니다.

브로커 주소 목록(imqAddressList)에 여러 주소가 지정되어 있는 브로커 클러스터에서 실패한 연결은 원래의 브로커에서뿐만 아니라 클러스터의 다른 브로커에서도 복원될 수 있습니다. 원래 브로커로의 재연결이 실패하면 클라이언트 런타임은 목록의 다른 주소로 시도합니다. imqAddressListBehaviorimqAddressListIterations 속성은 이전 절에 설명한 대로 연결 시도되는 주소의 순서와 목록 반복 횟수를 제어합니다. 각 주소에 대해 imqReconnectInterval 밀리초 간격으로 반복을 시도하며, imqReconnectAttempts를 통해 지정된 최대 시도 횟수까지 반복을 시도합니다.

자동 재연결은 메시지 사용에 대한 모든 클라이언트 확인 모드를 지원합니다. 연결이 다시 설정된 후 브로커는 이전에 전달한 확인되지 않은 모든 메시지를 다시 전달하며 해당 메시지에 Redeliver 플래그를 표시합니다. 응용 프로그램 코드에서는 이 플래그를 사용하여 이미 사용되었지만 아직 확인되지 않은 메시지가 있는지 확인합니다. 그러나 비영구 가입자의 경우 연결이 닫히게 되면 브로커에 메시지가 저장되지 않습니다. 따라서 연결이 종료된 상태에서 해당 가입자에 대해 생성된 메시지는 재연결 후에도 전달할 수 없으므로 손실됩니다.자동 재연결 중에는 메시지 생성이 차단됩니다. 메시지 생성자는 연결이 다시 설정될 때까지 브로커로 메시지를 보낼 수 없습니다.

자동 재연결은 연결 페일오버를 제공하지만 데이터 페일오버는 제공하지 않습니다. 실패한 브로커 또는 연결이 끊긴 브로커가 가지고 있는 지속성 메시지 및 기타 상태 정보는 클라이언트가 다른 브로커 인스턴스에 재연결될 때 손실될 수 있습니다. 연결 재설정을 시도하는 동안 Message Queue에서는 클라이언트 런타임이 제공한 객체(세션, 메시지 사용자 및 메시지 생성자)를 유지합니다. 연결 실패 시 잠시 동안 임시 대상도 유지 관리됩니다. 클라이언트가 다시 연결하여 임시 대상에 다시 액세스할 수도 있기 때문입니다. 클라이언트에게 다시 연결하여 이러한 대상을 사용할 수 있는 시간을 제공한 후 브로커는 해당 대상을 삭제합니다. 재연결 시 클라이언트측 상태를 브로커에서 완전히 복원할 수 없는 경우(예: 연결 시간 동안에만 존재하는 트랜잭션된 세션 사용 시) 자동 재연결이 수행되지 않으며 연결의 예외 처리기가 대신 호출됩니다. 그리고 나면 응용 프로그램 코드에 따라 예외, 재연결 및 복원 상태를 파악하게 됩니다.

주기적 연결 테스트(핑)

연결을 주기적으로 테스트하거나 “핑”을 실행하도록 Message Queue 클라이언트 런타임을 구성하면 시도한 메시지 전송이 실패하기 전에 먼저 연결 실패를 감지할 수 있습니다. 이러한 테스트는 메시지를 사용하기만 하고 생성하지는 않는 클라이언트 응용 프로그램에 특히 중요합니다. 그렇지 않으면 연결이 실패한 경우 이러한 응용 프로그램을 찾아낼 수 없기 때문입니다. 메시지를 가끔씩만 생성하는 클라이언트에도 이 기능을 유용하게 사용할 수 있습니다.

연결 팩토리 속성 imqPingInterval은 연결을 핑할 빈도(초)를 지정합니다. 기본적으로 이 간격은 30초로 설정되며 값 -1은 핑 작업을 수행할 수 없습니다.

실패한 핑에 대한 응답은 운영 체제 플랫폼마다 다릅니다. 일부 운영 체제에서는 클라이언트 응용 프로그램의 예외 수신기에 예외가 즉시 발생합니다. 클라이언트에 예외 수신기가 없는 경우에는 다음 번 연결 사용 시도가 실패합니다. 다른 시스템에서는 핑이 성공하거나 버퍼 오버플로가 발생할 때까지 연속적으로 핑을 버퍼링하여 브로커에 대한 연결 설정을 계속해서 시도하기도 합니다.

클라이언트 아이디

표 16–4에 나열된 연결 팩토리 속성은 클라이언트 인증과 영구 가입자의 클라이언트 식별자 설정을 지원합니다.

클라이언트 인증

메시지 서비스에서 관리하는 사용자 저장소에 대해 사용자 이름 및 비밀번호를 사용하여 브로커에 연결하려는 모든 시도를 인증해야 합니다. 연결 팩토리 속성 imqDefaultUsernameimqDefaultPassword는 연결을 생성할 때 클라이언트가 명시적으로 제공하지 않을 경우 사용할 기본 사용자 이름 및 비밀번호를 지정합니다.

응용 프로그램 개발 및 테스트 중 사용자 저장소 채우기를 번거롭게 여기는 개발자의 편의를 제공하기 위해 Message Queue는 사용자 이름과 비밀번호가 모두 guest인 guest 사용자 계정을 제공합니다. 또한 이 값은 imqDefaultUsernameimqDefaultPassword 속성의 기본값이기도 하므로, 명시적으로 지정되지 않은 경우 클라이언트는 항상 guest 계정으로 연결을 설정할 수 있습니다. 작업 환경에서 브로커 연결 액세스는 사용자 저장소에 명시적으로 등록되어 있는 사용자로만 제한되어야 합니다.

클라이언트 식별자

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를 사용한 프로그램 방식으로 클라이언트 식별자를 설정해야 합니다.

안정성 및 흐름 제어

클라이언트에서 송/수신되는 “페이로드” 메시지와 Message Queue에서 자체적으로 사용하는 제어 메시지(브로커 확인 등)는 동일한 클라이언트 브로커 연결을 생략하기 때문에 과도한 페이로드 트래픽 수준이 제어 메시지 전달을 방해할 수 있습니다. 이 문제를 줄이려면 표 16–5에 나열된 연결 팩토리 속성을 사용하여 두 가지 메시지 유형의 상대적 흐름을 관리할 수 있습니다. 이 속성들은 다음 네 가지 범주로 분류됩니다.

이러한 흐름 제어 기술 중 하나를 사용하려면 신뢰성과 처리량을 적절히 조정해야 합니다. 자세한 내용은 클라이언트 런타임 메시지 흐름 조정을 참조하십시오.

대기열 브라우저 및 서버 세션

표 16–6은 클라이언트 대기열 찾아보기와 서버 세션에 영향을 주는 연결 팩토리 속성을 나열합니다. imqQueueBrowserMaxMessagesPerRetrieve 속성은 대기열 대상 내용을 찾아볼 때 한 번에 검색할 수 있는 최대 메시지 수를 지정합니다. imqQueueBrowserRetrieveTimeout은 메시지 검색 시 최대 대기 시간을 지정합니다. imqQueueBrowserMaxMessagesPerRetrieve는 검색되는 총 메시지 수에는 영향을 주지 않고 클라이언트 런타임에 전달하기 위해 메시지가 청크되는 방법에만 영향을 줍니다. 청크가 클수록 메시지 수는 적고, 청크가 작을수록 메시지 수는 많아집니다. 클라이언트 응용 프로그램은 항상 대기열의 모든 메시지를 받습니다. 속성 값을 변경하면 성능에 영향을 줄 수 있지만, 검색되는 총 데이터 양에는 영향을 주지 않습니다.부울 속성 imqLoadMaxToServerSession은 응용 프로그램 서버 세션에서 연결 사용자의 동작을 제어합니다. 이 속성의 값이 true이면 클라이언트는 서버 세션에 최대 메시지 수까지 로드할 수 있습니다. false이면 한 번에 하나의 메시지만 로드합니다.

표준 메시지 등록 정보

JMS(Java Message Service) 사양은 JMS 공급자(Message Queue 등)가 필요에 따라 지원을 선택할 수 있는 특정 표준 메시지 등록 정보를 정의합니다. 편의상 이러한 표준 등록 정보의 이름은 모두 JMSX로 시작됩니다. 표 16–7에 나열된 연결 팩토리 속성은 Message Queue 클라이언트 런타임에서 특정 표준 등록 정보를 설정할지 여부를 제어합니다. 생성된 메시지의 경우에는 다음 등록 정보를 포함합니다.

사용된 메시지의 경우에는 다음 등록 정보를 포함합니다.

메시지 헤더 대체

표 16–8에 나열된 연결 팩토리 속성을 사용하여 특정 JMS 메시지 헤더 필드에 대해 클라이언트가 설정한 값을 무시할 수 있습니다. 사용자가 지정한 설정은 연결 팩토리에서 가져온 연결에서 생성된 모든 메시지에 사용됩니다. 이 방법으로 무시할 수 있는 헤더 필드는 다음과 같습니다.

이러한 각 필드에는필드를 무시할 수 있는지 여부를 제어하는 부울 속성과 값을 지정하기 위한 부울 속성의 두 가지 속성이 있습니다. 예를 들어, 우선 순위 수준을 설정하기 위한 속성은 imqOverrideJMSPriorityimqJMSPriority입니다. 임시 대상에 적용되는 값을 무시할지 여부를 제어하는 imqOverrideJMSHeadersToTemporaryDestinations 속성도 있습니다.


주 –

무시되는 메시지 헤더는 특정 응용 프로그램의 요구에 맞지 않을 수도 있으므로 이 속성은 반드시 응용 프로그램 설계자 또는 사용자와 상의하여 사용해야 합니다.