이 장에서는 Application Server에서 사용할 수 있도록 JMS(Java Message Service)의 로드 균형 조정 및 페일오버를 구성하는 방법을 설명합니다. 다음 항목으로 구성됩니다.
Java Message Service(JMS) API는 J2EE 응용 프로그램 및 구성 요소가 메시지를 작성하고, 보내고, 받고, 읽을 수 있도록 하는 메시징 표준입니다. 또한 느슨하게 결합되고 안정적인 비동기식 분산 통신을 가능하게 합니다. JMS를 구현하는 Sun Java System Message Queue 3 2005Q1(MQ)은 Application Server와 견고하게 통합되어 Message-Driven Bean(MDB)과 같은 구성 요소를 만들 수 있도록 합니다.
MQ는 J2EE Connector Architecture Specification 1.5에 의해 정의된 자원 어댑터라고도 하는 커넥터 모듈을 사용하여 Application Server와 통합됩니다. Application Server로 배포된 J2EE 구성 요소는 커넥터 모듈을 통해 통합된 JMS 공급자를 사용하여 JMS 메시지를 교환합니다. Application Server에서 JMS 자원을 만들면 백그라운드에서 커넥터 자원이 만들어집니다. 따라서 각 JMS 작업은 커넥터 런타임을 호출하며 백그라운드에서 MQ 자원 어댑터를 사용합니다.
관리 콘솔이나 asadmin 명령줄 유틸리티를 사용하여 Java Message Service를 관리할 수 있습니다.
mqfailover 샘플 응용 프로그램은 JMS 항목에서 들어오는 메시지를 받는 Message Driven Bean이 있는 MQ 페일오버를 보여 줍니다. 이 샘플에는 MDB와 응용 프로그램 클라이언트가 포함되어 있습니다. Application Server는 MDB의 가용성을 높입니다. 한 브로커가 다운되면 대화 상태(MDB에 수신된 메시지)가 클러스터의 다른 가용 브로커 인스턴스로 투명하게 마이그레이션됩니다.
이 샘플은 다음 위치에 설치됩니다.
install_dir/samples/ee-samples/failover/apps/mqfailover
JMS에 대한 자세한 내용은 Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Developer’s Guide의 14 장, Using the Java Message Service를 참조하십시오. 커넥터(자원 어댑터)에 대한 자세한 내용은 Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Developer’s Guide의 9 장, Developing Connectors를 참조하십시오.
Sun Java System Message Queue에 대한 자세한 내용은 Sun Java System Message Queue 설명서를 참조하십시오. JMS API에 대한 일반 정보는 JMS 웹 페이지를 참조하십시오.
Java Message Service 구성은 Sun Java System Application Server 클러스터 또는 인스턴스에 대한 모든 인바운드 및 아웃바운드 연결에서 사용할 수 있습니다. 다음에서 Java Message Service를 구성할 수 있습니다.
관리 콘솔. 적절한 구성을 사용하여 Java Message Service 구성 요소를 엽니다. 자세한 내용은 Sun Java System Application Server Enterprise Edition 8.1 2005Q2 관리 설명서의 4 장, JMS(Java Message Service) 자원 구성을 참조하십시오.
asadmin set 명령. 다음 속성을 설정할 수 있습니다.
server.jms-service.init-timeout-in-seconds = 60 server.jms-service.type = LOCAL server.jms-service.start-args = server.jms-service.default-jms-host = default_JMS_host server.jms-service.reconnect-interval-in-seconds = 60 server.jms-service.reconnect-attempts = 3 server.jms-service.reconnect-enabled = true server.jms-service.addresslist-behavior = random server.jms-service.addresslist-iterations = 3 server.jms-service.mq-scheme = mq server.jms-service.mq-service = jms
다음 등록 정보도 설정할 수 있습니다.
server.jms-service.property.instance-name = imqbroker server.jms-service.property.instance-name-suffix = server.jms-service.property.append-version = false
Java Message Service 속성 및 등록 정보를 모두 나열하려면 asadmin get명령을 사용합니다. asadmin get에 대한 자세한 내용은 get(1)을 참조하십시오. asadmin set에 대한 자세한 내용은 set(1)을 참조하십시오.
JMS 연결 팩토리 설정을 사용하여 Java Message Service 구성을 대체할 수 있습니다. 자세한 내용은 Sun Java System Application Server Enterprise Edition 8.1 2005Q2 관리 설명서의 JMS 연결 팩토리의 관리 콘솔 작업을 참조하십시오.
Java Message Service의 구성을 변경한 후에 Application Server 인스턴스를 다시 시작해야 합니다.
JMS 관리에 대한 자세한 내용은 Sun Java System Application Server Enterprise Edition 8.1 2005Q2 관리 설명서의 4 장, JMS(Java Message Service) 자원 구성을 참조하십시오.
MQ는 관리 콘솔의 Java Message Service Type 속성에 표시되는 LOCAL 및 REMOTE의 두 가지 방법으로 Application Server에통합할 수 있습니다.
Type 속성이 LOCAL(독립 실행형 Application Server 인스턴스의 기본값)이면 Application Server는 기본 JMS 호스트로 지정된 MQ 브로커를 시작했다가 중지합니다. 독립 실행형 Application Server 인스턴스에는 LOCAL 유형이 가장 적절합니다.
Application Server 인스턴스와 Message Queue 브로커 사이에 일대일 관계를 만들려면 이 유형을 LOCAL로 설정하고 각 Application Server 인스턴스에 다른 기본 JMS 호스트를 부여합니다. 클러스터가 Application Server에 정의되는지 또는 MQ에 정의되는지에 관계없이 이 작업을 수행할 수 있습니다.
LOCAL 유형을 사용할 경우 Start Arguments 속성을 사용하여 MQ 브로커 시작 매개 변수를 지정합니다.
Type 속성이 REMOTE이면 MQ 브로커를 따로 시작해야 합니다. 이 값은 클러스터가 Application Server에 정의된 경우 기본값입니다. 브로커 시작에 대한 자세한 내용은 Sun Java System Message Queue Administration Guide를 참조하십시오.
이 경우 Application Server에서는 외부에 구성된 브로커나 브로커 클러스터를 사용합니다. 또한 Application Server와는 별도로 MQ 브로커를 시작 및 중지해야 하며 MQ 도구를 사용하여 브로커 또는 브로커 클러스터를 구성하고 조정해야 합니다. REMOTE 유형은 Application Server 클러스터에 가장 적절합니다.
REMOTE 유형을 사용할 경우 MQ 도구를 사용하여 MQ 브로커 시작 매개 변수를 지정해야 합니다. Start Arguments 속성은 무시됩니다.
JMS 호스트는 MQ 브로커를 나타냅니다. Java Message Service에는 Application Server가 사용하는 모든 JMS 호스트가 들어 있는 JMS 호스트 목록(AddressList라고도 함)이 포함되어 있습니다.
JMS 호스트 목록은 지정된 MQ 브로커의 호스트 및 포트로 채워지며 JMS 호스트 구성이 변경될 때마다 업데이트됩니다. JMS 자원을 만들거나 MDB를 배포하면 해당 항목에 JMS 호스트 목록이 상속됩니다.
Sun Java System Message Queue 소프트웨어에서 AddressList 등록 정보는 imqAddressList로 지정됩니다.
JMS 호스트 목록의 호스트 중 하나가 Default_JMS_host라는 기본 JMS 호스트로 지정됩니다. Java Message Service 유형이 LOCAL로 구성되면 Application Server 인스턴스가 기본 JMS 호스트를 시작합니다.
Sun Java System Message Queue 소프트웨어에서 다중 브로커 클러스터를 만든 경우 기본 JMS 호스트를 삭제하고 Message Queue 클러스터의 브로커를 JMS 호스트로 추가합니다. 이 경우 기본 JMS 호스트는 JMS 호스트 목록의 첫 번째 호스트가 됩니다.
Application Server는 Message Queue 클러스터를 사용할 때 기본 JMS 호스트에서 Message Queue 특정 명령을 실행합니다. 예를 들어, 세 개의 브로커로 구성된 Message Queue 클러스터에 대해 하나의 물리적 대상이 만들어질 때 물리적 대상을 만드는 명령은 기본 JMS 호스트에서 실행되지만 클러스터의 세 브로커 모두에서 해당 물리적 대상이 사용됩니다.
다음 방법으로 추가 JMS 호스트를 만들 수 있습니다.
관리 콘솔을 사용합니다. 적절한 구성에서 Java Message Service 구성 요소를 열고 JMS 호스트 구성 요소를 선택한 후 새로 만들기를 누릅니다. 자세한 내용은 Sun Java System Application Server Enterprise Edition 8.1 2005Q2 관리 설명서의 JMS 호스트를 만드는 방법을 참조하십시오.
asadmin create-jms-host 명령을 사용합니다. 자세한 내용은 create-jms-host(1)를 참조하십시오.
JMS 호스트 목록은 JMS 호스트 구성이 변경될 때마다 업데이트됩니다.
Application Server는 JMS 연결 풀링 및 페일오버를 지원합니다. Sun Java System Application Server는 JMS 연결을 자동으로 풀링합니다. 주소 목록 동작 속성이 random(기본값)이면 Application Server는 JMS 호스트 목록에서 무작위로 기본 브로커를 선택합니다. 페일오버가 발생하면 MQ는 로드를 투명하게 다른 브로커로 전송하고 JMS 의미를 유지 관리합니다.
To specify whether the Application Server가 연결이 끊어졌을 때 기본 브로커에 다시 연결하려고 시도할지 여부를 지정하려면 다시 연결 확인란을 선택합니다. 이 옵션을 선택한 상태에서 기본 브로커가 다운되면 Application Server는 JMS 호스트 목록의 다른 브로커로 다시 연결하려고 시도합니다.
다시 연결을 선택한 경우 다음 속성도 지정하십시오.
주소 목록 동작: 연결 시도가 JMS 주소 목록에 있는 주소 순서대로 수행될지(priority) 또는 무작위로 수행될지(random) 여부. Priority로 설정하면 Java Message Service는 JMS 호스트 목록에 지정된 첫 번째 MQ 브로커에 연결하려고 시도한 후 첫 번째 브로커를 사용할 수 없는 경우에만 다른 브로커를 사용합니다. Random으로 설정하면 Java Message Service는 JMS 호스트 목록에서 무작위로 MQ 브로커를 선택합니다. 동일한 연결 팩토리를 사용하여 연결을 시도하는 클라이언트가 많을 경우 이 설정을 사용하여 클라이언트가 모두 동일한 주소에 연결을 시도하지 못하도록 합니다.
주소 목록 반복: Java Message Service가 연결을 설정하거나 다시 설정하기 위해 JMS 호스트 목록 전체를 반복하는 횟수. 값 -1은 횟수에 제한이 없음을 나타냅니다.
다시 연결 시도: 클라이언트 런타임에서 JMS 호스트 목록의 다음 주소로 연결을 시도하기 전에 목록의 각 주소에 연결 또는 다시 연결을 시도하는 횟수. 값 -1은 재연결 시도 횟수에 제한이 없음을 나타냅니다. 클라이언트 런타임은 성공할 때까지 첫 번째 주소에 연결을 시도합니다.
다시 연결 간격: 다시 연결 시도 간격(초). JMS 호스트 목록의 각 주소에 대한 다시 연결 시도와 목록의 후속 주소에 이 값이 적용됩니다. 이 시간 간격이 너무 짧을 경우 브로커가 복구할 시간이 없습니다. 너무 길 경우에는 지연이 지나치게 길게 느껴질 수 있습니다.
JMS 연결 팩토리 설정을 사용하여 이러한 설정을 대체할 수 있습니다. 자세한 내용은 Sun Java System Application Server Enterprise Edition 8.1 2005Q2 관리 설명서의 JMS 연결 팩토리의 관리 콘솔 작업을 참조하십시오.
Application Server에서는 동일한 ClientID를 갖는 MDB에 무작위로 메시지를 전달합니다. 영구 가입자에게는 ClientID가 필요합니다.
ClientID가 구성되지 않은 비영구 가입자의 경우 동일한 항목에 가입된 특정 MDB의 모든 인스턴스가 동일한 것으로 간주됩니다. MDB가 Application Server의 여러 인스턴스에 배포되면 MDB 중 하나만 메시지를 받습니다. 여러 고유 MDB가 동일한 항목에 가입하면 각 MDB의 한 인스턴스가 메시지 복사본을 받습니다.
동일한 대기열을 사용하는 여러 사용자를 지원하려면 물리적 대상의 maxNumActiveConsumers 등록 정보를 큰 값으로 설정하십시오. 이 등록 정보를 설정하면 MQ는 지정된 최대 수의 MDB가 동일한 대기열의 메시지를 사용할 수 있도록 허용합니다. 메시지는 MDB에 무작위로 배달됩니다. maxNumActiveConsumers가 -1로 설정되면 사용자 수에 제한이 없습니다.
MQ Enterprise Edition은 브로커 클러스터로 알려져 있는 상호 연결된 여러 브로커 인스턴스를 지원합니다. 브로커 클러스터를 사용하면 클라이언트 연결이 클러스터에 있는 모든 브로커 간에 분산됩니다. 클러스터링은 수평적 확장을 제공하며 가용성을 향상시킵니다.
이 절에서는 고가용성 Sun Java System Message Queue 클러스터를 사용하도록 Application Server를 구성하는 방법을 설명합니다. 또한 Message Queue 클러스터를 시작하고 구성하는 방법을 설명합니다.
Application Server 토폴로지 및 MQ 배포에 대한 자세한 내용은 Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Deployment Planning Guide의 Planning Message Queue Broker Deployment를 참조하십시오.
Application Server 클러스터가 아직 없으면 만듭니다.
클러스터를 만드는 방법에 대한 자세한 내용은 클러스터 만들기를 참조하십시오.
MQ 브로커 클러스터를 만듭니다.
먼저 도메인 관리 서버에 의해 시작된 브로커를 참조하는 기본 JMS 호스트를 삭제한 후 MQ 브로커 클러스터에 포함될 세 개의 외부 브로커(JMS 호스트)를 만듭니다.
관리 콘솔이나 asadmin 명령줄 유틸리티에서 JMS 호스트를 만듭니다.
asadmin을 사용하려면 다음과 같이 명령을 지정합니다.
asadmin delete-jms-host --target cluster1 default_JMS_host asadmin create-jms-host --target cluster1 --mqhost myhost1 --mqport 6769 --mquser admin --mqpassword admin broker1 asadmin create-jms-host --target cluster1 --mqhost myhost2 --mqport 6770 --mquser admin --mqpassword admin broker2 asadmin create-jms-host --target cluster1 --mqhost myhost3 --mqport 6771 --mquser admin --mqpassword admin broker3 |
관리 콘솔을 사용하여 호스트 만들기
마스터 MQ 브로커 및 기타 MQ 브로커를 시작합니다.
JMS 호스트 시스템에서 세 개의 외부 브로커를 시작하고 임의의 시스템에서 하나의 마스터 브로커를 시작합니다. 이 마스터 브로커는 브로커 클러스터에 속할 필요가 없습니다. 예를 들면 다음과 같습니다.
/usr/bin/imqbrokerd -tty -name brokerm -port 6772 -cluster myhost1:6769,myhost2:6770,myhost2:6772,myhost3:6771 -D"imq.cluster.masterbroker=myhost2:6772" |
클러스터의 Application Server 인스턴스를 시작합니다.
클러스터에 JMS 자원을 만듭니다.
JMS 물리적 대상을 만듭니다.
예를 들어, asadmin을 사용하려면 다음과 같이 지정합니다.
asadmin create-jmsdest --desttype queue --target cluster1 MyQueue asadmin create-jmsdest --desttype queue --target cluster1 MyQueue1 |
관리 콘솔을 사용하려면
JMS 연결 팩토리를 만듭니다.
예를 들어, asadmin을 사용하려면 다음과 같이 지정합니다.
asadmin create-jms-resource --target cluster1 --restype javax.jms.QueueConnectionFactory jms/MyQcf asadmin create-jms-resource --target cluster1 --restype javax.jms.QueueConnectionFactory jms/MyQcf1 |
관리 콘솔을 사용하려면
JMS 대상 자원을 만듭니다.
예를 들어, asadmin을 사용하려면 다음과 같이 지정합니다.
asadmin create-jms-resource --target cluster1 --restype javax.jms.Queue --property imqDestinationName=MyQueue jms/MyQueue asadmin create-jms-resource --target cluster1 --restype javax.jms.Queue --property imqDestinationName=MyQueue1 jms/MyQueue1 |
관리 콘솔을 사용하려면
응용 프로그램 클라이언트에 대해 – retrieve 옵션을 지정하여 응용 프로그램을 배포합니다. 예를 들면 다음과 같습니다.
asadmin deploy --target cluster1 --retrieve /opt/work/MQapp/mdb-simple3.ear |
응용 프로그램에 액세스한 후 예상대로 동작하는지 테스트합니다.
Application Server를 기본 JMS 구성으로 되돌리려면 만든 JMS 호스트를 삭제하고 기본 JMS 호스트를 다시 만듭니다. 예를 들면 다음과 같습니다.
asadmin delete-jms-host --target cluster1 broker1 asadmin delete-jms-host --target cluster1 broker2 asadmin delete-jms-host --target cluster1 broker3 asadmin create-jms-host --target cluster1 --mqhost myhost1 --mqport 7676 --mquser admin --mqpassword admin default_JMS_host |
관리 콘솔에서도 동일한 작업을 수행할 수 있습니다.
문제가 발생하면 다음을 참조하십시오.
Application Server 로그 파일을 검토합니다. 로그 파일에 MQ 브로커가 메시지에 응답하지 않는 것으로 나오면 브로커를 중지했다가 다시 시작합니다.
항상 MQ 브로커를 시작한 후 Application Server 인스턴스를 시작합니다.
Java Message Service에서 기본값을 지정할 경우 모든 MQ 브로커가 다운되면 Application Server가 다운되거나 다시 작동되는 데 30분 정도 소요됩니다. Java Message Service에서 이 시간 초과 값을 적절히 조정하십시오. 예를 들면 다음과 같습니다.
asadmin set --user admin --password administrator cluster1.jms-service.reconnect-interval-in-seconds=5