연결 처리 속성은 연결할 브로커 주소를 지정하고, 필요한 경우 연결 실패를 찾아내어 재연결을 시도하는 방법을 지정합니다. 이러한 속성은 표 16–1에 요약되어 있습니다.
가장 중요한 연결 처리 속성은 imqAddressList로서, 이 속성은 브로커 또는 연결을 설정할 브로커를 지정합니다. 이 속성의 값은 하나의 브로커 주소 또는 (브로커 클러스터의 경우) 쉼표로 구분된 여러 주소를 포함하는 문자열입니다. 브로커 주소는 사용할 연결 서비스( 연결 서비스 참조)와 연결 설정 방법에 따라 다양한 주소 지정 체계를 사용할 수 있습니다.
mq는 브로커의 포트 매퍼를 사용하여 jms 또는 ssljms 연결 서비스를 위해 포트를 동적으로 할당합니다.
mqtcp는 포트 매퍼를 우회하고 jms 연결 서비스를 사용하여 지정된 포트로 직접 연결합니다.
mqssl은 ssljms 연결 서비스를 사용하여 지정된 포트에 SSL(Secure Socket Layer) 연결을 설정합니다.
http는 httpjms 연결 서비스를 사용하여 지정된 URL에서 Message Queue 터널 서블릿으로 HTTP(Hypertext Transport Protocol) 연결을 설정합니다.
https는 httpsjms 연결 서비스를 사용하여 지정된 URL에서 Message Queue 터널 서블릿으로 HTTPS(Secure Hypertext Transport Protocol) 연결을 설정합니다.
이러한 주소 지정 체계는 표 16–2에 요약되어 있습니다.
각 브로커 주소의 일반 형식은 다음과 같습니다.
scheme://address
여기서 scheme은 위에 나열된 주소 지정 체계 중 하나이며 address는 브로커 주소 자체를 나타냅니다. 표 16–2의 마지막 열에 표시된 대로, 주소를 지정하는 정확한 구문은 주소 지정 체계에 따라 다릅니다. 표 16–3에서는 다양한 주소 형식의 예를 보여줍니다.
다중 브로커 클러스터 환경의 주소 목록에는 두 개 이상의 브로커 주소가 포함될 수 있습니다. 첫 번째 연결 시도가 실패하면 Message Queue 클라이언트 런타임에서 목록에 있는 다른 주소로 연결을 시도하며, 연결되지 않은 경우 목록의 마지막 항목에 이를 때까지 계속 시도합니다. 두 개의 추가 연결 팩토리 속성이 이러한 연결 시도 방법을 제어합니다.
imqAddressListBehavior는 지정한 주소로 연결을 시도하는 순서를 지정합니다. 이 속성이 PRIORITY 문자열로 설정된 경우 주소에 대한 연결 시도는 주소 목록에 나타나는 순서대로 실행됩니다. 속성 값이 RANDOM이면 임의의 순서대로 주소를 선택하여 연결을 시도합니다. 이 방법은 많은 Message Queue 클라이언트가 동일한 연결 팩토리 객체를 공유하는 경우 모든 클라이언트가 동일한 브로커 주소로의 연결을 시도하지 않도록 하는 데 유용합니다.
imqAddressListIterations는 연결을 포기하고 실패를 보고하기 전에 목록 전체를 몇 번씩 반복할지 지정합니다. 값 -1은 무제한 반복을 의미합니다. 연결이 설정되거나 종료 시간까지(둘 중 먼저 발생하는 항목) 클라이언트 런타임에서 연결을 계속 시도합니다.
연결 팩토리의 imqReconnectEnabled 속성을 true로 설정하면 연결에 실패한 경우 클라이언트가 브로커에 자동으로 다시 연결할 수 있습니다. imqReconnectAttempts 속성은 지정된 브로커 주소에 대한 재연결 시도 횟수를 제어하고, imqReconnectInterval 속성은 시도 간격(초)을 지정합니다.
브로커 주소 목록(imqAddressList)에 여러 주소가 지정되어 있는 브로커 클러스터에서 실패한 연결은 원래의 브로커에서뿐만 아니라 클러스터의 다른 브로커에서도 복원될 수 있습니다. 원래 브로커로의 재연결이 실패하면 클라이언트 런타임은 목록의 다른 주소로 시도합니다. imqAddressListBehavior 및 imqAddressListIterations 속성은 이전 절에 설명한 대로 연결 시도되는 주소의 순서와 목록 반복 횟수를 제어합니다. 각 주소에 대해 imqReconnectInterval 밀리초 간격으로 반복을 시도하며, imqReconnectAttempts를 통해 지정된 최대 시도 횟수까지 반복을 시도합니다.
자동 재연결은 메시지 사용에 대한 모든 클라이언트 확인 모드를 지원합니다. 연결이 다시 설정된 후 브로커는 이전에 전달한 확인되지 않은 모든 메시지를 다시 전달하며 해당 메시지에 Redeliver 플래그를 표시합니다. 응용 프로그램 코드에서는 이 플래그를 사용하여 이미 사용되었지만 아직 확인되지 않은 메시지가 있는지 확인합니다. 그러나 비영구 가입자의 경우 연결이 닫히게 되면 브로커에 메시지가 저장되지 않습니다. 따라서 연결이 종료된 상태에서 해당 가입자에 대해 생성된 메시지는 재연결 후에도 전달할 수 없으므로 손실됩니다.자동 재연결 중에는 메시지 생성이 차단됩니다. 메시지 생성자는 연결이 다시 설정될 때까지 브로커로 메시지를 보낼 수 없습니다.
자동 재연결은 연결 페일오버를 제공하지만 데이터 페일오버는 제공하지 않습니다. 실패한 브로커 또는 연결이 끊긴 브로커가 가지고 있는 지속성 메시지 및 기타 상태 정보는 클라이언트가 다른 브로커 인스턴스에 재연결될 때 손실될 수 있습니다. 연결 재설정을 시도하는 동안 Message Queue에서는 클라이언트 런타임이 제공한 객체(세션, 메시지 사용자 및 메시지 생성자)를 유지합니다. 연결 실패 시 잠시 동안 임시 대상도 유지 관리됩니다. 클라이언트가 다시 연결하여 임시 대상에 다시 액세스할 수도 있기 때문입니다. 클라이언트에게 다시 연결하여 이러한 대상을 사용할 수 있는 시간을 제공한 후 브로커는 해당 대상을 삭제합니다. 재연결 시 클라이언트측 상태를 브로커에서 완전히 복원할 수 없는 경우(예: 연결 시간 동안에만 존재하는 트랜잭션된 세션 사용 시) 자동 재연결이 수행되지 않으며 연결의 예외 처리기가 대신 호출됩니다. 그리고 나면 응용 프로그램 코드에 따라 예외, 재연결 및 복원 상태를 파악하게 됩니다.
연결을 주기적으로 테스트하거나 “핑”을 실행하도록 Message Queue 클라이언트 런타임을 구성하면 시도한 메시지 전송이 실패하기 전에 먼저 연결 실패를 감지할 수 있습니다. 이러한 테스트는 메시지를 사용하기만 하고 생성하지는 않는 클라이언트 응용 프로그램에 특히 중요합니다. 그렇지 않으면 연결이 실패한 경우 이러한 응용 프로그램을 찾아낼 수 없기 때문입니다. 메시지를 가끔씩만 생성하는 클라이언트에도 이 기능을 유용하게 사용할 수 있습니다.
연결 팩토리 속성 imqPingInterval은 연결을 핑할 빈도(초)를 지정합니다. 기본적으로 이 간격은 30초로 설정되며 값 -1은 핑 작업을 수행할 수 없습니다.
실패한 핑에 대한 응답은 운영 체제 플랫폼마다 다릅니다. 일부 운영 체제에서는 클라이언트 응용 프로그램의 예외 수신기에 예외가 즉시 발생합니다. 클라이언트에 예외 수신기가 없는 경우에는 다음 번 연결 사용 시도가 실패합니다. 다른 시스템에서는 핑이 성공하거나 버퍼 오버플로가 발생할 때까지 연속적으로 핑을 버퍼링하여 브로커에 대한 연결 설정을 계속해서 시도하기도 합니다.