JEUS MQ 서버 설정
본 장에서는 JEUS MQ 서버를 실행하기 위한 JMS 엔진과 리소스 설정 방법에 대해서 설명한다.
1. 개요
JEUS MQ 서버는 JMS 엔진으로 표현되며, 서버 당 하나의 JMS 엔진이 실행될 수 있다. JEUS의 각 구성 요소에 대한 설명은 JEUS Server 안내서의 소개를 참고한다.
1.1. 디렉터리 구조
다음은 JEUS 및 JEUS MQ 서버를 설정하고 관리하기 위한 파일들의 위치를 보여준다. JEUS_HOME은 JEUS가 설치된 경로를 나타낸다.
{JEUS_HOME} |--bin | |--[01]jeusadmin |--logs * Legend - [01]: binary or executable file - [X] : XML document - [J] : JAR file - [T] : Text file - [C] : Class file - [V] : java source file - [DD] : deployment descriptor
- jeusadmin
-
JEUS Manager를 관리하기 위한 콘솔 툴이다. JEUS Manager와 서버 제어를 포함해 JEUS 전반에 대한 관리 기능을 제공한다. 자세한 사용법은 JEUS Reference 안내서의 jeusadmin을 참고한다.
1.2. WebAdmin 사용
WebAdmin 메인 화면에서 Master Server를 선택한 후 JEUS Master 화면에서 [서버] 메뉴를 클릭하면 도메인 내에 설정된 JEUS 서버의 목록이 조회된다. 서버 목록에서 설정할 서버의 이름을 클릭하면 서버 설정 화면으로 이동한다. JEUS MQ 서버 설정은 WebAdmin를 통해 설정할 것을 권장한다.
서버 설정 화면은 다음 탭으로 구성된다.
-
[Basic] 탭
[Basic] 메뉴는 JMS와 관련된 설정 부분이 없으므로 설명에서 제외한다.
-
[Resource] 탭
JMS 리소스와 JMS Quota에 대한 설정 메뉴 [Jms Resource], [Jms Quota]를 선택할 수 있다. JMS 리소스에 대한 자세한 설명은 JMS 리소스 설정을 참고한다. JMS Quota에 대한 자세한 설명은 JMS Quota 설정을 참고한다.
본 안내서는 JMS 설정에 해당하는 부분에 대한 설명만 하므로 [Resource] 탭의 다른 설정 메뉴(Listener, Jmx Manager, Scheduler, Lifecycle Invocation, External Resource)에 대한 자세한 내용은 JEUS WebAdmin 안내서 또는 관련 안내서를 참고한다.
-
[Engine] 탭
설정 메뉴([Web Engine], [Jms Engine], [Ejb Engine]) 중 [Jms Engine]를 선택하면 Jms Engine 화면에서 JEUS MQ 서버에 대해 설정할 수 있다.
Jms Engine 화면은 다음의 탭으로 구성된다.
탭 설명 [Basic] 탭
JEUS MQ 서버의 Failover, Quota와 JMS 엔진의 고급 선택사항을 설정한다. Failover에 대한 자세한 내용은 JEUS MQ 장애 극복을 참고한다. JMS 엔진에 대한 자세한 내용은 기본 정보 설정를 참고한다.
[Service Config] 탭
JEUS MQ 서버가 클라이언트와 통신하는 서비스 채널(Service Channel)에 대한 설정이다. 자세한 설정 방법은 서비스 채널 설정을 참고한다.
[Connection Factory] 탭
JEUS MQ 서버에서 사용하는 JMS 관리 객체인 ConnectionFactory에 관한 설정이다. 자세한 설정 방법은 Connection Factory 설정을 참고한다.
[Persistence Store] 탭
JEUS MQ 서버에서 사용하는 Persistence Store에 관한 설정이다. 자세한 설정 방법은 Persistence Store 설정을 참고한다.
[Message Sort] 탭
JEUS MQ 서버의 Message Sort 기능을 위한 설정이다. 자세한 설정 방법은 JEUS MQ Message Sort를 참고한다.
2. JMS 리소스 설정
서버 설정 화면에서 [Resource] > [Jms Resource] 메뉴를 선택하면 Jms Resource 화면에서 JMS 리소스를 설정할 수 있다.
Jms Resource 화면은 다음의 2개 영역으로 구성된다.
-
Destination 영역
JEUS MQ 서버 내의 Destination에 관한 설정 영역이다. Queue나 Topic과 같은 Destination 역시 JEUS MQ 서버가 기동할 때 도메인 설정을 읽어 JEUS JNDI 서비스에 등록한다. 자세한 설정 방법은 Destination 설정을 참고한다.
-
Durable Subscription 영역
JEUS MQ 서버 내의 Durable Subscription에 설정 영역이다. 자세한 설정 방법은 Durable Subscription 설정을 참고한다.
2.1. Destination 설정
Queue나 Topic과 같은 Destination 역시 JEUS MQ 서버가 기동할 때 도메인 설정을 읽어 JEUS JNDI 서비스에 등록한다. Jms Resource 화면의 Destination 영역에서 설정할 리소스 목록에서 특정 리소스의 이름을 클릭하면 해당 리소스에 대한 설정 화면이 나타난다.
메시지 흐름 제어
Jms Resource 화면의 Destination 영역에서 특정 리소스의 이름을 클릭하면 해당 리소스에 대한 Destination 설정 화면으로 이동한다. 설정 항목 중 'Max Pending Limit', 'Resume Dispatch Factor' 항목은 메시지 흐름을 제어한다.
메시지 수신자가 Destination에 Message Listener를 등록한 경우 JEUS MQ 서버는 Destination에 메시지가 도착하면 해당 클라이언트에게 메시지를 전송한다. 그런데 서버가 메시지를 전송하는 속도보다 클라이언트에서 메시지를 처리하는 속도가 느리면 클라이언트 메모리에 메시지가 계속해서 쌓이게 되고, 결국 클라이언트 JVM에서 OutOfMemoryError가 발생할 수 있다. 이와 같은 상황을 방지하기 위해 클라이언트 측에 아직 처리되지 않고 쌓여 있는 메시지의 최대 개수를 설정하여 이 개수를 초과하면 서버가 클라이언트로 잠시 동안 메시지를 전송하지 않도록 할 수 있다.
2.2. Durable Subscription 설정
일반적으로 Durable Subscriber는 클라이언트가 생성하기 때문에 생성 이전에 Topic에 도착한 메시지는 클라이언트에게 전달되지 않는다. 이런 상황을 방지하기 위해 JEUS MQ는 Durable Subscription을 설정하여 서버가 실행될 때 미리 Durable Subscription을 등록해두었다가 조건에 맞는 클라이언트가 접속했을 때 Durable Subscriber로 메시지를 전달하는 기능을 제공한다. Session.createDurableSubscriber() 메소드를 호출할 때 클라이언트 ID와 Subscription 이름 및 Topic이 필요한 것처럼 JEUS WebAdmin에서 Durable Subscription을 설정할 때도 동일한 항목을 설정해야 한다. 추가로 Message Selector도 설정할 수 있다.
Jms Resource 화면의 Durable Subscription 영역에서 설정할 특정 리소스의 이름을 클릭하면 설정 화면이 나타난다.
3. JMS Quota 설정
서버 설정 화면에서 [Resource] > [Jms Quota] 메뉴를 선택하면 Jms Quota 화면에서는 JEUS MQ Quota에 대해 설정할 수 있다.
3.1. Quota 설정
Destination에 클라이언트에게 전달되지 않은 메시지가 계속해서 늘어나면 JVM이 OutOfMemoryError를 내면서 서버가 종료될 수 있다. 이를 방지하기 위해 JEUS MQ는 Quota 설정을 통해 JMS Destination별 메모리 관리를 위한 Quota를 설정 할 수 있는 방법을 제공한다.
Destination이 많은 메모리를 사용하고 있지 않을 때 JEUS MQ 서버는 메시지 내용에 대한 Strong Reference를 가지고 있다. JMS Destination 내에 'Quota'를 지정하면 메모리 사용량에 따라 JEUS MQ 서버는 다음과 같이 동작한다.
-
Destination이 사용하고 있는 메모리가 'Quota' 설정값 이상이면 클라이언트의 메시지 송신 시도는 실패하고 JMSException이 발생한다.
-
Destination이 사용하고 있는 메모리가 'Quota' 설정값의 75%이상이면 저장소에 저장한 메시지의 내용은 메모리에서 관리하지 않는다.
Destination에 도착한 메시지의 내용이 메모리에서 삭제되어도 메시지는 유실되지 않는다. 메시지는 저장소에 저장되어 있기 때문에 JEUS MQ 서버는 필요할 때 메시지 내용을 저장소로부터 읽어서 처리한다. 이 경우 처리 속도는 메시지 내용이 메모리에 있을 때보다 느릴 수 밖에 없다.
JEUS MQ 서버는 저장소에 저장하지 않은 메시지 내용을 항상 메모리에 가지고 있으므로, 'Quota'에 의한 설정은 저장소가 설정되어 있고 메시지를 DeliveryMode.PERSISTENT로 지정한 경우에만 영향을 미친다. |
Quota를 설정한 후에 Destination에서 Quota 기능을 사용하도록 설정할 수 있다. 자세한 내용은 Destination 설정을 참고한다.
4. JMS 엔진 설정
서버 설정 화면의 탭과 메뉴를 선택해서 JMS 엔진 설정을 할 수 있다.
4.1. 기본 정보 설정
JEUS MQ 서버는 서버 설정 화면에서 [Engine] > [Jms Engine] 메뉴를 선택한 후 Jms Engine 화면에서 설정할 수 있다.
[Basic] 탭을 선택하면 JMS 엔진 기본 정보 설정 화면으로 이동한다. JEUS MQ 서버의 Failover, Quota와 JMS 엔진의 고급 선택사항을 설정하는 화면으로 구성된다. 상단의 Failover 설정에서는 서버나 네트워크에 장애가 발생하는 경우 이를 복구하는 정보를 설정한다. Failover 설정에 대한 자세한 내용은 JEUS MQ 장애 극복을 참고한다.
-
엔진 메모리 관리
JMS 엔진 기본 설정 화면의 'Max Bytes', 'Max Messages' 항목은 JMS 엔진의 메모리 관리를 위한 Quota 정보를 설정한다.JEUS MQ 서버는 서버 내 모든 Destination의 메모리를 통괄하는 JMS 엔진의 Quota 설정과 각 Destination의 Quota 설정 정보를 사용하여 메모리를 관리한다. 메모리 관리 정책에 대한 자세한 내용은 JMS Quota 설정을 참고한다.
-
고급 선택사항 설정
JMS 엔진 고급 선택사항 화면에서는 JEUS MQ 서버가 사용하는 Thread에 대한 정보를 설정한다.
JMS 엔진의 메시지 처리 방식은 크게 두 가지로 나뉜다. 먼저, 일반적인 메시지는 순서 보장과 동시처리에 따른 경쟁을 피하기 위해 Event manager에 의해 Single Thread로 처리된다. 그외의 특수 기능, 클러스터간 메시지 전송, 트랜잭션 제어, JMS 엔진 제어를 위한 메시지 등은 각 형태에 따라 Thread pool의 Thread로 처리하고 있다.
4.2. 서비스 채널 설정
JEUS MQ 서버는 서비스 채널(Service Channel)을 통해서 클라이언트와 통신한다. 하나의 JEUS MQ 서버에는 최소한 하나의 서비스 채널이 있어야 하며 각 서비스 채널마다 서비스 URL 등의 네트워크 설정을 다르게 지정할 수 있다.
서비스 채널이 사용하는 리스너의 이름은 서버 설정 화면에서 [Resource] > [Listener] 메뉴를 선택해서 설정한다. 리스너 설정에 대한 자세한 설명은 JEUS Server 안내서의 Listener 설정을 참고한다.
서비스 채널은 서버 설정 화면에서 [Engine] > [Jms Engine] > [Service Config] 탭을 선택한 후 리스너 목록 중 채널을 설정할 대상을 선택하면 나타나는 Service Config 설정 화면에서 설정할 수 있다.
4.3. Connection Factory 설정
Connection Factory는 JMS 관리 객체로 클라이언트가 JMS 서버에 접속하는 데 필요한 연결 설정 정보와 클라이언트를 위한 기본 정보들을 가지고 있다. JEUS MQ 서버가 기동될 때 생성되어 JEUS JNDI 서비스에 등록된다.
Connection Factory는 서버 설정 화면에서 [Engine] > [Jms Engine] > [Connection Factory] 탭을 선택한 후 목록에서 설정할 대상을 선택하면 나타나는 Connection Factory 설정 화면에서 설정할 수 있다.
4.4. Persistence Store 설정
Persistence Store는 서버가 재기동될 때 메시지나 Subscription, 트랜잭션들의 이전 상태를 복구하기 위해 필요하다. Persistence Store를 설정하지 않으면 클라이언트에서 DeliveryMode.PERSISTENT 방식으로 메시지를 송신한 경우에 서버에서 장애가 발생했을 때 메시지 전달을 보장할 수 없다. JEUS MQ에서 제공하는 Persistence Store의 종류에는 저널 로그와 데이터베이스가 있다.
Persistence Store 설정은 서버 설정 화면에서 [Engine] > [Jms Engine] > [Persistence Store]을 선택하면 이동하는 Jms Engine 설정 화면에서 할 수 있다.
Persistence Store 정보는 [수정] 버튼을 클릭한 후 'Store' 항목에서 설정한다.
다음은 'Store' 항목의 설정 값에 대한 설명이다.
설정값 | 설명 |
---|---|
None |
Persistence Store를 설정하지 않는다. |
Journal |
저널 로그 방식을 사용한다. |
JDBC |
데이터베이스 방식을 사용한다. 현재 호환 가능한 외부 데이터베이스는 다음과 같다.
'Data Source' 항목에 설정된 값은 Persistence Store로 사용할 데이터소스의 JNDI 이름이다. JEUS에 데이터소스를 추가하는 방법은 DB Connection Pool과 JDBC를 참고한다. 위와 같이 설정하는 경우 해당 데이터베이스 내의 테이블 이름을 변경할 수 있다. 이 태그들을 사용하면 운용 중인 서버에서 테스트를 수행하는 경우 별도의 Persistence Store를 설치하지 않고도 사용하는 테이블의 이름만 바꿔서 JEUS MQ 서버를 테스트하는 것이 가능하다. 테이블의 이름을 설정하지 않는 경우 기본적으로 <SERVER-NAME>_DEST, <SERVER-NAME>_DSUB, <SERVER-NAME>_MESG, <SERVER-NAME>_SMSG, <SERVER-NAME>_TRAN이라는 이름의 테이블을 사용하게 된다. JDBC를 설정했을 때 생성되는 테이블들의 각 컬럼에 대한 설명은 JDBC Persistence Store 컬럼을 참고한다. |
4.5. Message Sort 설정
Message Sort 기능에 대한 설정은 JEUS MQ Message Sort의 설명을 참고한다.
5. 서버 관리 및 모니터링
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 서버를 관리 및 모니터링하는 방법에 대해 설명한다.
5.1. 서버 관리
다음은 콘솔 툴(jeusadmin)과 WebAdmin을 사용해서 서버를 관리하는 방법에 대한 설명이다.
WebAdmin 사용
WebAdmin을 통해 JMS에 필요한 Connection Factory, Destination, Durable Subscription 관리할 수 있다. 각 목록에서 [추가], [삭제] 버튼을 통해 Connection Factory를 추가하거나 삭제할 수 있다.
-
Connection Factory 관련
서버 설정 화면에서 [Engine] > [Jms Engine] > [Connection Factory] 탭을 선택하면 설정된 Connection Factory 목록을 조회할 수 있다.
-
Destination 관련
서버 설정 화면에서 [Resource] > [Jms Resource] 메뉴를 선택하면 설정된 Destination 목록을 조회할 수 있다.
-
Durable Subscription 관련
서버 설정 화면에서 [Resource] > [Jms Resource] 메뉴를 선택하면 설정된 Durable Subscription 목록을 조회할 수 있다.
콘솔 툴 사용
콘솔 툴은 콘솔에서 여러 가지 명령어를 실행해서 서버 관리작업을 수행할 수 있는 툴로 다음의 경로에 위치한다.
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을 제거한다.
-
Durable Subscription 관련
명령어 설명 add-jms-durable-subscription
Durable Subscription을 추가한다.
remove-jms-durable-subscription
Durable Subscription을 제거한다.
명령어에 대한 자세한 설명과 사용법, 사용 예는 JEUS Reference 안내서의 JMS 엔진 관련 명령어를 참고한다. |
5.2. 서버 모니터링
본 절에서는 콘솔 툴과 WebAdmin을 사용해서 서버 모니터링을 하는 방법에 대해 설명한다.
WebAdmin 사용
WebAdmin 메인 화면에서 Master Server를 선택한 후 JEUS Master 화면 상단의 메뉴에서 [상태]를 선택한 후 메뉴에서 [JMS]를 선택하면 JMS 화면에서 JEUS MQ 서버의 현재 상태를 모니터링할 수 있다.
JMS 화면의 탭을 선택해서 Destination, Durable Subscription, 클라이언트, 트랜잭션 관련 사항을 조회할 수 있다.
-
Destination 관련
[Destinations] 탭을 선택하고 [Server], [Cluster] 메뉴를 선택한다. 조회 목록에서 서버나 클러스터를 선택하면 현재 서버 또는 클러스터에 있는 Destination 목록과 정보를 조회한다. Destination의 이름을 클릭하면 해당 Destination의 더 자세한 정보를 조회할 수 있다. Destination 조회와 메시지 관련 모니터링 기능에 대한 설명과 사용 예는 JEUS MQ Message Management 기능을 참고한다.
-
Durable Subscription 관련
[Durable Subscriptions] 탭을 선택하고 [Server], [Cluster] 메뉴를 선택한다. 조회 목록에서 서버나 클러스터를 선택하면 현재 서버 또는 클러스터에 있는 Durable Subscription 목록과 정보를 조회한다.
-
클라이언트 관련
[JMS Clients] 탭을 선택하고 조회할 서버를 선택하면 현재 서버에 접속된 JMS 클라이언트의 목록과 정보를 조회한다.
-
트랜잭션 관련
[JMS Pending Transactions] 탭을 선택하면 JMS에 관련된 Indoubt Transaction의 목록을 조회한다.
콘솔 툴 사용
콘솔 툴은 콘솔에서 여러 가지 명령어를 실행해서 서버 관리작업을 수행할 수 있는 툴로 다음의 경로에 위치한다.
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 안내서의 JMS 엔진 관련 명령어를 참고한다. |