내용 목차
본 장에서는 JEUS MQ 서버를 실행하기 위한 JMS 엔진과 리소스 설정 방법에 대해서 설명한다.
JEUS MQ 서버는 JMS 엔진으로 표현되며, 서버 당 하나의 JMS 엔진이 실행될 수 있다. JEUS의 각 구성 요소에 대한 설명은 “JEUS Server 안내서”의 “제1장 소개”를 참고한다.
다음은 JEUS 및 JEUS MQ 서버를 설정하고 관리하기 위한 파일들의 위치를 보여준다. JEUS_HOME은 JEUS가 설치된 경로를 나타낸다.
JEUS Manager를 관리하기 위한 콘솔 툴이다. JEUS Manager와 서버 제어를 포함해 JEUS 전반에 대한 관리 기능을 제공한다. 자세한 사용법은 “JEUS Reference Book”의 “4.2. jeusadmin”을 참고한다.
JEUS 도메인 설정 파일로 JEUS MQ 서버에 대한 모든 설정을 한다.
domain.xml에 <jms-engine>은 JMS 엔진에 관한 설정을 하고, <jms-resource>에는 Queue나 Topic과 같은 JMS 엔진에 필요한 리소스를 설정한다.
WebAdmin에서 [Servers] 메뉴를 클릭하면 도메인 내에 설정된 JEUS 서버의 목록이 조회된다. 서버 목록에서 설정할 서버의 이름을 클릭하면 서버 설정 화면으로 이동한다.
JEUS WebAdmin에서 JEUS MQ 서버 설정은 다음의 메뉴로 구성된다.
[Basic]
[Resource]
[Engine]
JEUS MQ 서버 설정은 WebAdmin를 통해 설정할 것을 권장한다.
다음은 각 메뉴의 화면에 대한 설명이다. [Basic] 메뉴는 JMS와 관련된 설정 부분이 없으므로 설명에서 제외한다.
Jms Resource 화면에서는 JMS 리소스에 대해 설정한다. WebAdmin의 [Servers] > [서버명] > [Resource] 탭에서 [Jms Resource] 메뉴를 선택한다.
다음은 Jms Resource 화면이다. 화면에 대한 자세한 설명은 “3.2. JMS 리소스 설정”을 참고한다.
본 안내서는 JMS 설정에 해당하는 부분에 대한 설명만 하므로 [Resource] 탭의 다른 설정 메뉴(Listener, Jmx Manager, Scheduler, Lifecycle Invocation, External Resource)에 대한 자세한 내용은 "JEUS WebAdmin 안내서" 또는 관련 안내서를 참고한다.
Jms Engine 화면에서는 JEUS MQ 서버에 대해 설정한다. 각각 JMS 엔진의 [Servers] > [서버명] > [Engine] 탭의 [Jms Engine] 메뉴를 선택한다.
다음은 Jms Engine 화면이다.
JMS Engine 화면은 다음의 메뉴로 구성된다.
[Basic]
JEUS MQ 서버의 Failover와 JMS 엔진의 고급 선택사항을 설정한다. Failover에 관해서는 “제5장 JEUS MQ 장애 극복”을 참고한다. JMS 엔진의 고급 선택사항에 관한 자세한 설명은 “3.3.1. 기본 정보 설정”을 참고한다.
[Service Config]
JEUS MQ 서버가 클라이언트와 통신하는 서비스 채널(Service Channel)에 대한 설정이다. 자세한 설정 방법은 “3.3.2. 서비스 채널 설정”을 참고한다.
[Connection Factory]
JEUS MQ 서버에서 사용하는 JMS 관리 객체인 ConnectionFactory에 관한 설정이다. 자세한 설정 방법은 “3.3.3. Connection Factory 설정”을 참고한다.
[Persistence Store]
JEUS MQ 서버에서 사용하는 Persistence Store에 관한 설정이다. 자세한 설정 방법은 “3.3.4. Persistence Store 설정”을 참고한다.
[Message Sort]
JEUS MQ 서버의 Message Sort 기능을 위한 설정이다. 자세한 설정 방법은 “6.2. JEUS MQ Message Sort”를 참고한다.
Jms Resource 화면에서는 JMS 리소스에 대해 설정한다. WebAdmin에서 [Servers] > [서버명] > [Resource] 탭의 [Jms Resource] 메뉴를 선택한다.
Jms Resource 화면은 다음의 2개 영역으로 구성된다.
Destination
JEUS MQ 서버 내의 Destination에 관한 설정이다. 자세한 설정 방법은 “3.2.1. Destination 설정”을 참고한다.
Durable Subscriber
JEUS MQ 서버 내의 Durable Subscriber에 관한 설정이다. 자세한 설정 방법은 “3.2.2. Durable Subscriber 설정”을 참고한다.
Queue나 Topic과 같은 Destination 역시 JEUS MQ 서버가 기동할 때 도메인 설정을 읽어 JEUS JNDI 서비스에 등록한다. Jms Resource 화면의 Destination 영역에서 설정할 리소스 목록에서 특정 리소스의 이름을 클릭하면 다음과 같이 해당 리소스에 대한 설정 화면이 나타난다.
각 항목의 정보를 설정하고 [확인] 버튼을 클릭하면 설정한 정보가 저장된다. 항목을 다시 설정하려면 [재설정] 버튼을 클릭한다.
Destination에 클라이언트에게 전달되지 않은 메시지가 계속해서 늘어나면 JVM이 OutOfMemoryError를 내면서 서버가 종료될 수 있다. 이를 방지하기 위해 JEUS MQ는 Destination 설정을 통해 Destination별로 메모리 관리 정책을 설정할 수 있는 방법을 제공한다.
Destination이 많은 메모리를 사용하고 있지 않을 때 JEUS MQ 서버는 메시지 내용에 대한 Strong Reference를 가지고 있다. Destination 설정 내에 'Limit', 'High Mark' 값을 지정하면 메모리 사용량에 따라 JEUS MQ 서버는 다음과 같이 동작한다.
Destination이 사용하고 있는 메모리가 'Limit' 설정값 이상이면 클라이언트의 메시지 송신 시도는 실패하고 JMSException이 발생한다. 'Limit'는 기본값은 128MB이다.
Destination이 사용하고 있는 메모리가 'High Mark' 설정값 이상이면 스토리지에 저장한 메시지의 내용은 메모리에서 관리하지 않는다. 'High Mark'의 기본값은 96MB이다.
Destination에 도착한 메시지의 내용이 메모리에서 삭제되어도 메시지는 유실되지 않는다. 메시지는 스토리지에 저장되어 있기 때문에 JEUS MQ 서버는 필요할 때 메시지 내용을 스토리지로부터 읽어서 처리한다. 이 경우 처리 속도는 메시지 내용이 메모리에 있을 때보다 느릴 수 밖에 없다.
JEUS MQ 서버는 스토리지에 저장하지 않은 메시지 내용을 항상 메모리에 가지고 있으므로, 'High Mark'에 의한 설정은 스토리지가 설정되어 있고 메시지를 DeliveryMode.PERSISTENT로 지정한 경우에만 영향을 미친다.
Destination 화면의 'Max Pending Limit', 'Resume Dispatch Factor' 항목은 메시지 흐름을 제어한다. 메시지 수신자가 Destination에 Message Listener를 등록한 경우 JEUS MQ 서버는 Destination에 메시지가 도착하면 해당 클라이언트에게 메시지를 전송한다. 그런데 서버가 메시지를 전송하는 속도보다 클라이언트에서 메시지를 처리하는 속도가 느리면 클라이언트 메모리에 메시지가 계속해서 쌓이게 되고, 결국 클라이언트 JVM에서 OutOfMemoryError가 발생할 수 있다. 이와 같은 상황을 방지하기 위해 클라이언트 측에 아직 처리되지 않고 쌓여 있는 메시지의 최대 개수를 설정하여 이 개수를 초과하면 서버가 클라이언트로 잠시 동안 메시지를 전송하지 않도록 할 수 있다.
일반적으로 Durable Subscriber는 클라이언트가 생성하기 때문에 생성 이전에 Topic에 도착한 메시지는 클라이언트에게 전달되지 않는다. 이런 상황을 방지하기 위해 JEUS MQ는 Durable Subscriber를 설정하여 서버가 실행될 때 미리 Durable Subscriber를 등록해두었다가 조건에 맞는 클라이언트가 접속했을 때 메시지를 전달하는 기능을 제공한다. Session.createDurableSubscriber() 메소드를 호출할 때 클라이언트 ID와 Subscription 이름 및 Topic이 필요한 것처럼 JEUS WebAdmin에서 Durable Subscriber를 설정할 때도 동일한 항목을 설정해야 한다. 추가로 Message Selector도 설정할 수 있다.
Jms Resource 화면의 Durable Subscriber 영역에서 설정할 특정 리소스의 이름을 클릭하면 다음과 같이 설정 화면이 나타난다.
각 항목의 정보를 설정하고 [확인] 버튼을 클릭하면 설정한 정보가 저장된다. 항목을 다시 설정하려면 [재설정] 버튼을 클릭한다.
Jms Engine 화면에서는 JEUS MQ 서버에 대해 설정한다. 각각 JMS 엔진의 [Servers] > [서버명] > [Engine] 탭의 [Jms Engine] 메뉴를 선택한다.
Jms Engine 화면에서 [Basic] 메뉴를 선택하면 JMS 엔진 기본 정보 설정 화면으로 이동한다.
화면은 JEUS MQ 서버의 Failover와 JMS 엔진의 고급 선택사항을 설정하는 화면으로 구성된다. 상단의 Failover 설정에서는 서버나 네트워크에 장애가 발생하는 경우 이를 복구하는 정보를 설정한다. Failover 설정에 대한 자세한 내용은 “제5장 JEUS MQ 장애 극복”을 참고한다.
JMS 엔진 고급 선택사항 화면에서는 JMS 엔진의 브로커 이름과 JEUS MQ 서버가 사용하는 Thread Pool에 대한 정보를 설정을 한다.
JMS의 비동기적인 특성에 따라 클라이언트와 메시지를 주고받거나 서버 내부에서 메시지를 처리하고 스토리지에 저장하는 등의 작업은 각각 별도의 스레드에 의해 수행된다.
JEUS MQ 서버 내에서 동시에 실행 가능한 스레드의 개수는 이 Thread Pool 설정에 의해 결정된다. 서버의 성능에 크게 영향을 미치므로 동시 처리 가능한 클라이언트의 수와 서버에 걸리는 부하 등을 고려한 적절한 설정이 필요하다.
다음은 고급 선택사항 설정 화면이다.
JEUS MQ 서버는 서비스 채널(Service Channel)을 통해서 클라이언트와 통신한다. 하나의 JEUS MQ 서버에는 최소한 하나의 서비스 채널이 있어야 하며 각 서비스 채널마다 서비스 URL 등의 네트워크 설정을 다르게 지정할 수 있다.
서비스 채널이 사용하는 리스너의 이름은 [Server] > [Resource] > [Listener]에서 설정한다. 리스너 설정에 대한 자세한 설명은 “JEUS Server 안내서”의 “2.3.2. Listener 설정”을 참고한다.
[Servers] > [서버명] > [Engine] > [Jms Engine] > [Service Config] 탭을 선택하면 서비스 채널에서 사용하는 리스너 목록이 조회된다. 리스너 목록에서 채널을 설정할 대상을 선택하면, 다음의 설정 화면이 나타난다.
각 항목의 정보를 설정하고 [확인] 버튼을 클릭하면 설정한 정보가 저장된다. 항목을 다시 설정하려면 [재설정] 버튼을 클릭한다.
Connection Factory는 JMS 관리 객체로 클라이언트가 JMS 서버에 접속하는 데 필요한 연결 설정 정보와 클라이언트를 위한 기본 정보들을 가지고 있다. JEUS MQ 서버가 기동될 때 생성되어 JEUS JNDI 서비스에 등록된다.
[Servers] > [서버명] > [Engine] > [Jms Engine] > [Connection Factory] 탭을 선택하면 Connection Factory 목록이 조회된다. 목록에서 설정할 대상을 선택하면, 다음의 설정 화면이 나타난다.
각 항목의 정보를 설정하고 [확인] 버튼을 클릭하면 설정한 정보가 저장된다. 항목을 다시 설정하려면 [재설정] 버튼을 클릭한다.
Persistence Store는 서버가 재기동될 때 메시지나 Subscription, 트랜잭션들의 이전 상태를 복구하기 위해 필요하다. Persistence Store를 설정하지 않으면 클라이언트에서 DeliveryMode.PERSISTENT 방식으로 메시지를 송신한 경우에 서버에서 장애가 발생했을 때 메시지 전달을 보장할 수 없다. JEUS MQ에서 제공하는 Persistence Store의 종류에는 저널 로그와 데이터베이스가 있다.
Persistence Store 설정은 WebAdmin의 [Server] > [Engine] > [Jms Engine] > [Persistence Store] 메뉴를 선택한다.
저널 로그 방식을 사용하려면 'Journal'을 선택하고 데이터베이스 방식을 사용하려면 'Jdbc'를 선택해서 설정한다.
저널 로그 방식
저널 로그 방식으로 Persistence Store를 사용할 경우에는 다음과 같이 설정한다.
데이터베이스 방식
다음은 외부 데이터베이스를 Persistence Store로 설정한 예이다. 이 설정은 저널 설정 하단에 위치해 있다.
현재 호환 가능한 외부 데이터베이스는 다음과 같다.
Oracle Database 9i 이상 (Enterprise Edition)
Tibero 3.0 SP2 이상
Altibase 4.x (5 이상은 지원하지 않음)
'Data Source' 항목에 설정된 값은 Persistence Store로 사용할 데이터소스의 JNDI 이름이다. JEUS에 데이터소스를 추가하는 방법은 “JEUS Server 안내서”의 “제6장 DB Connection Pool과 JDBC”를 참고한다.
위와 같이 설정하는 경우 해당 데이터베이스 내의 테이블 이름을 변경할 수 있다. 이 태그들을 사용하면 운용 중인 서버에서 테스트를 수행하는 경우 별도의 Persistence Store를 설치하지 않고도 사용하는 테이블의 이름만 바꿔서 JEUS MQ 서버를 테스트하는 것이 가능하다. 테이블의 이름을 설정하지 않는 경우 기본적으로 <BROKER-NAME>_DEST, <BROKER-NAME>_DSUB, <BROKER-NAME>_MESG, <BROKER-NAME>_SMSG, <BROKER-NAME>_TRAN이라는 이름의 테이블을 사용하게 된다.
JDBC를 설정했을 때 생성되는 테이블들의 각 컬럼에대한 설명은 “Appendix B. JDBC Persistence Store 컬럼”을 참고한다.
Message Sort 기능에 대한 설정은 “6.2. JEUS MQ Message Sort”의 설명을 참고한다.
JEUS MQ 서버 관리는 다음과 같은 작업을 통해 메시지 유실 없이 지속적인 서비스가 가능하도록 하는 것이다.
운용 중인 JEUS MQ 서버의 리소스 관리 및 모니터링
다음의 리소스들이 관리 및 모니터링의 대상이 된다.
Connection Factory, Destination과 같은 JMS 관리 객체
Destination과 Durable Subscription의 메시지
클라이언트에 할당된 커넥션, 세션, 메시지 송/수신자
JEUS MQ 서버가 차지하는 메모리 영역
JEUS MQ 서버가 사용하는 Persistent Storage
장애 상황에 대처하고 장애로부터 JEUS MQ 서버를 복구
JEUS는 콘솔 툴인 jeusadmin과 WebAdmin을 제공해서 JEUS MQ 서버 관리 및 모니터링하는 기능을 제공한다. 본 절에서는 각 툴을 사용해서 JEUS MQ 서버를 관리 및 모니터링하는 방법에 대해 설명한다.
다음은 콘솔 툴(jeusadmin)과 WebAdmin을 사용해서 서버를 관리하는 방법에 대한 설명이다.
WebAdmin을 통해 JMS에 필요한 Connection Factory, Destination, Durable Subsriber들을 관리할 수 있다. 각 목록에서 [ADD], [DEL] 버튼을 통해 Connection Factory를 추가하거나 삭제할 수 있다.
Connection Factory 관련
[Server] > [Engine] > [Jms Engine] > [Connection Factory] 메뉴를 선택하면 설정된 Connection Factory 목록을 조회할 수 있다.
Destination 관련
[Server] > [Resource] > [Jms Resource] 메뉴를 선택하면 설정된 Destination 목록을 조회할 수 있다.
Durable Subscriber 관련
[Server] > [Resource] > [Jms Resource] 메뉴를 선택하면 설정된 Durable Subscriber 목록을 조회할 수 있다.
콘솔 툴은 콘솔에서 여러 가지 명령어를 실행해서 서버 관리작업을 수행할 수 있는 툴로 다음의 경로에 위치한다.
JEUS_HOME/bin/
다음은 서버 관리를 위해서 제공되는 명령어 목록이다.
Connection Factory 관련
명령어 | 설명 |
---|---|
add-jms-connection-factory | Connection Factory를 추가한다. |
remove-jms-connection-factory | Connection Factory를 제거한다. |
Destination 관련
명령어 | 설명 |
---|---|
add-jms-destination | Destination을 추가한다. |
remove-jms-destination | Destination을 제거한다. |
명령어에 대한 자세한 설명과 사용법, 사용 예는 “JEUS Reference Book”의 “4.2.9. JMS 엔진 관련 명령어”를 참고한다.
다음은 콘솔 툴과 WebAdmin을 사용해서 서버 모니터링을 하는 방법에 대한 설명이다.
WebAdmin의 [Monitornig] > [JMS] 메뉴를 통해 JEUS MQ 서버의 현재 상태를 모니터링할 수 있다.
Destination 관련
[Destinations] 탭을 선택하고 [Server]나 [Cluster] 메뉴를 선택한다. 조회 목록에서 서버나 클러스터를 선택하면 현재 서버 또는 클러스터에 있는 Destination 목록과 정보를 조회한다.
Destination의 이름을 클릭하면 해당 Destination의 더 자세한 정보를 조회할 수 있다. Destination 조회와 메시지 관련 모니터링 기능에 대한 설명과 사용 예는 “6.5. JEUS MQ Message Management 기능”을 참고한다.
Durable Subscription 관련
[Durable Subscriptions] 탭을 선택하고 조회할 서버를 선택하면 현재 서버에 존재하는 Durable Subscription 목록과 정보를 조회한다.
클라이언트 관련
[JMS Clients] 탭을 선택하고 조회할 서버를 선택하면 현재 서버에 접속된 JMS 클라이언트의 목록과 정보를 조회한다.
트랜잭션 관련
콘솔 툴은 콘솔에서 여러 가지 명령어를 실행해서 서버 관리작업을 수행할 수 있는 툴로 다음의 경로에 위치한다.
JEUS_HOME/bin/
다음은 서버 모니터링을 위해서 제공되는 명령어 목록이다.
Connection Factory 관련
명령어 | 설명 |
---|---|
list-jms-connection-factories | Connection Factory 목록을 조회하거나 지정된 Conntection Factory의 정보를 출력한다. |
Destination 관련
명령어 | 설명 |
---|---|
list-jms-destinations | Destination 목록을 조회하거나 지정된 Destination 정보를 출력한다. |
control-jms-destination | 지정된 Destination의 상태를 제어한다. |
메시지 관련
명령어 | 설명 |
---|---|
list-jms-messages | 지정된 Destination 내의 메시지들의 정보를 조회한다. |
view-jms-message | 지정된 메시지의 상세한 정보를 조회한다. |
move-jms-messages | 지정된 메시지들을 서버나 클러스터 내의 다른 Destination으로 이동한다. |
delete-jms-messages | 지정된 메시지들을 Destination에서 삭제한다. |
export-jms-messages | 지정된 메시지들을 XML 파일 형태로 내보낸다. |
import-jms-messages | 내보내진 XML 파일의 메시지들을 지정된 Destination으로 가져온다. |
Durable Subscription관련
명령어 | 설명 |
---|---|
list-jms-durable-subscriptions | Durable Subscription 목록을 조회하거나 지정된 Durable Subscription 정보를 조회한다. |
클라이언트 관련
명령어 | 설명 |
---|---|
list-jms-clients | 클라이언트 목록을 조회하고 정보를 출력한다. |
ban-jms-client | 클라이언트로부터의 연결을 강제로 끊는다. |
트랜잭션 관련
명령어 | 설명 |
---|---|
list-jms-pending-transactions | pending 트랜잭션 목록을 출력한다. |
commit-jms-pending-transaction | 지정된 pending 트랜잭션을 강제로 commit한다. |
명령어에 대한 자세한 설명과 사용법, 사용 예는 “JEUS Reference Book”의 “4.2.9. JMS 엔진 관련 명령어”를 참고한다.