HMS를 사용하기 위해서는 Tmax의 환경 파일에 HMS 관련 설정을 추가해야 한다.
본 장에서는 HMS 관련 설정에 대해서 설명한다.
HMS를 사용하기 위해서는 DOMAIN, NODE, SVRGROUP, HMS 절에 대한 설정이 필요하다.
다음은 DOMAIN 절에서 HMS 사용을 위한 환경설정 형식과 항목에 대한 설명이다.
*DOMAIN Domain1 [MAXSESSION = numeric]
MAXSESSION = numeric
크기 : 1 ~ 65535
기본값 : 1024
도메인 내의 HMS에서 생성할 수 있는 세션 수의 최댓값을 설정한다.
다음은 NODE 절의 환경설정 형식과 항목에 대한 설명이다.
*NODE Node1 [MAXSESSION = numeric]
MAXSESSION = numeric
크기 : 1 ~ 65535
기본값 : 1024
노드 내의 HMS에서 생성할 수 있는 세션의 최댓값을 설정한다.
다음은 SVRGROUP 절의 환경설정 형식과 항목에 대한 설명이다.
*SVRGROUP ServergroupName NODENAME = node-name, SVGTYPE = HMS, HMSNAME = string, OPENINFO = literal, HMSINDEX = numeric, HMSMAXTHR = numeric, HMSMAXDBTHR = numeric, [HMSMAXBULKTHR = numeric,] [HMSMAXBULKSIZE = numeric,] [HMSOPT = literal,] [HMSSUBSCFG = string,] [HMSMSGLIVE = numeric,] [HMSPORT = numeric,] [HMSHEARTBEAT = numeric,] [HMSGQINT = numeric]
ServergroupName = string
크기: 15자 이내
HMS 서버 그룹에 대한 논리적인 이름으로서 SVRGROUP 절 내에서 유일한 이름이어야 한다.
NODENAME = string
크기: 15자 이내
HMS 서버 그룹이 존재하는 노드를 정의한다. 사용되는 NODENAME은 NODE 절에서 정의한 노드 이름이어야 한다.
SVGTYPE = string
해당 서버 그룹의 종류를 정의한다. HMS를 사용하기 위해서는 반드시 SVGTYPE=HMS로 설정해야만 한다.
HMSNAME = string
크기: 15자 이내
사용자가 빌드한 HMS 프로세스 이름을 정의한다.
OPENINFO = literal
HMS는 기본적으로 데이터베이스를 storage로 사용한다. 따라서 HMS에서 연결할 DBMS의 OPENINFO를 설정해야 한다.
데이터베이스로 연결을 초기화하고 각 데이터베이스에서 제공되는 문법으로 정의한다.
HMSINDEX = numeric
크기 : 0 ~ 65535
HMS의 메시지를 처리하는 데 필요한 설정값으로, 도메인 내에서 유일한 값으로 반드시 설정해야 한다.
HMSMAXTHR = numeric
크기 : 0 ~ 65535
storage 처리를 하지 않는 스레드의 수를 설정한다.
비영속성 메시지만 송수신하는 경우 이 항목의 값을 크게 늘려주어야 한다. 비영속적 메시지 이외에도 HMS의 기본적 동작을 위해 일정 수 이상 설정해야 한다.
HMSMAXDBTHR = numeric
크기 : 0 ~ 65535
storage 처리를 하는 스레드의 수를 설정한다.
영속적 메시지가 많은 경우 이 값을 늘려줄 필요가 있다. 영속적 메시지 처리 외에도 HMS의 기본적 동작을 위해 일정 수 이상 설정해야 한다.
HMSMAXBULKTHR = numeric
범위 : 1 ~ 65535
HMS 메시지에 대한 storage를 일괄적으로 처리하는 스레드의 수를 설정한다.
HMSMAXBULKSIZE = numeric
범위 : 2 ~ 65535
HMS 메시지에 대한 storage를 일괄 처리할 때 한 번에 처리할 수 있는 메시지의 최대 개수를 설정한다.
HMSOPT = literal
크기 : 255자 이내
HMS가 기동될 때 HMS 프로세스로 전달되는 명령어 옵션들을 정의한다.
옵션 | 설명 |
---|---|
-e 파일명 | HMS 동작 중에 발생하는 표준 에러(standard error)를 파일에 기록한다. |
-o 파일명 | HMS 동작 중에 발생하는 표준 출력(standard output)을 파일에 기록한다. |
HMSSUBSCFG = string
크기 : 255자 이내
영속적 구독자(Durable Subscriber)를 설정한 환경 파일의 경로와 이름을 설정한다. 파일 안의 내용은 Label을 [TopicName]으로 설정한 후, 각 라인마다 ClientName:Listener:Selector의 순으로 콜론(:)을 구분자로 구분하여 넣어준다.
환경 파일에 정의된 영속적 구독자는 HMS가 기동되면서 자동으로 등록된다.
HMSMSGLIVE = numeric
크기 : 0 ~ 65535 (단위 : 시간 )
HMS는 영속적 메시지를 storage에 저장한다. storage에 쌓인 메시지들을 주기적으로 삭제할 시간을 설정한다.
모든 구독자가 수신한 Topic 메시지, 소비가 완료된 Queue 메시지는 설정된 시간이 경과되면 storage에서 삭제된다. 아직 받지 않은 영속적 수신자가 존재하는 메시지는 설정된 시간이 경과되어도 storage에서 삭제되지 않는다.
HMSPORT = numeric
다수의 HMS를 클러스터링하는 경우 각 HMS는 서로 통신하기 위해 직접 채널을 생성한다. 이때 사용하는 포트 번호를 설정한다.
GLOBAL 속성을 설정한 Destination이 존재하는 경우 HMS는 설정된 포트 번호로 Listen 한다. 따라서 이미 사용하고 있는 포트를 설정하지 않도록 주의해야 한다.
HMSHEARTBEAT = numeric
크기 : 0 ~ 65535 (단위 : 초)
다수의 HMS를 클러스터링하는 경우 HMS 간의 네트워크 장애 감지를 위해 주기적으로 Heartbeat 메시지를 주고받는다. 이 메시지를 전송하는 주기를 설정한다.
주기 안에 Hearbeat 메시지가 다른 HMS에서 오지 않은 경우 장애로 감지해 해당 HMS와의 연결을 끊는다.
HMSGQINT = numeric
크기 : 0 ~ 65535 (단위 : 밀리초)
GLOBAL 속성을 설정한 Queue 간의 메시지를 주고받기 위해서는 각 Queue의 상태 정보를 주고받아야 하는데, 이 정보를 주고받는 주기를 설정한다.
클러스터링된 Queue를 사용하기 위해서는 반드시 설정해야 한다. 주기가 짧을수록 정확한 분배가 가능하지만 그 만큼 네트워크의 부하는 크므로 적당한 크기의 값을 설정할 필요가 있다.
다음은 HMS 절의 환경설정 형식과 항목에 대한 설명이다.
*HMS
DestinationName SVGNAME = string,
TYPE = TOPIC | QUEUE,
[BOOT = WARM | (COLD),]
[GLOBAL = Y | (N),]
[GQTHR = numeric,]
[GQMAXREQ = numeric,]
[GQFULL = numeric]
DestinationName = string
크기 : 15자 이내
Destination의 이름을 설정한다. 생산자와 소비자는 이 이름을 사용하여 생성된다.
SVGNAME = string
크기 : 15자 이내
Destination이 존재하게 될 HMS 서버 그룹명을 정의한다.
SVGNAME은 SVRGROUP 절에서 정의한 HMS 서버 그룹명(SVRGROP 이름)이어야 한다.
TYPE = TOPIC | QUEUE
Destination의 타입을 설정한다. 현재 TOPIC과 QUEUE만 지원한다.
BOOT = WARM | COLD
기본값 : COLD
해당 Destination에 대해 기동할 때 복구할 메시지가 있을 경우 복구 여부를 설정한다.
RQ와 마찬가지로 WARM과 COLD만 설정할 수 있으며 기본값은 COLD이다.
구분 | 설명 |
---|---|
WARM | storage에 있는 처리되지 않은 메시지가 복구된다. |
COLD | 기동할 때 해당 메시지를 모두 삭제하고 시작한다. |
GLOBAL = Y | N
기본값 : N
클러스터링된 HMS의 같은 이름을 갖는 Destination들을 논리적으로 하나의 Destination으로 동작하도록 설정한다.
GLOBAL 설정을 하기 위해서는 SVRGROUP 절의 HMS 설정에 HMSPORT가 설정되어 있어야 한다.
Queue에 대한 GLOBAL 설정을 하기 위해서는 GQTHR, GQMAXREQ, GQFULL의 추가적인 설정이 필요하다.
GQTHR = numeric
크기 : 0 ~ 65535
클러스터링된 Queue가 유지할 버퍼 크기를 결정하는 계수값을 설정한다.
버퍼의 크기 = (소비자의 수) X (GQTHR 값)
현재 Queue의 길이가 버퍼 크기보다 작을 때 나눠줄 메시지가 있는 클러스터링된 다른 Queue로부터 메시지를 가져온다. 버퍼의 크기보다 적은 메시지를 가지고 있을 때 메시지 분배 요청을 받으면 메시지를 나눠주지 않는다.
GQMAXREQ = numeric
크기 : 1 ~ 65535
클러스터링된 Queue가 다른 Queue에게 메시지를 요청할 경우 한 번에 요청할 수 있는 메시지의 수를 설정한다. 설정된 값이 클 경우 적은 횟수로 필요한 메시지를 채울 수 있지만, 너무 클 경우 노드 사이에 불필요한 메시지의 이동이 발생할 수 있으므로 너무 크지 않도록 설정하는 것을 권장한다.
GQFULL = numeric
크기 : 0 ~ 65535
클러스터링된 Queue의 메시지 소비가 이루어지지 않거나 메시지가 불균형적으로 너무 많이 쌓일 경우를 대비해 설정한 수 이상의 메시지가 쌓일 경우 그 초과분에 한해 다른 노드의 클러스터링 Queue에게 메시지를 균등하게 나눠 준다.
다음은 HMS를 사용하는 환경 파일의 예제이다.
*DOMAIN Domain1 SHMKEY = 0x11936, TMMLOGLVL = "DEBUG1", CLHLOGLVL = "DEBUG1", MINCLH = 1, MAXCLH = 1, TPORTNO = 7783, MAXSESSION = 1024 *NODE Node1 TMAXDIR = "/data/tmax", APPDIR = "/data/tmax/appbin/", MAXSESSION = 1024 *SVRGROUP svghms NODENAME = "node1", CPC=1, SVGTYPE="HMS", RESTART=N, OPENINFO = "ORACLE_XA+Acc=P/scott/tiger+SesTm=60+Threads=true", HMSSUBSCFG = "/data/tmax/config/hmssubsconfig", HMSNAME = "hms_ora", HMSSINDEX = 1, HMSMSGLIVE = 1, HMSMAXTHR = 4, HMSMAXDBTHR = 10 *SERVER … *SERVICE … *HMS queue1 SVGNAME = svghms, TYPE = "QUEUE", BOOT = "WARM", GLOBAL = N topic1 SVGNAME = svghms, TYPE = "TOPIC", BOOT = "WARM", GLOBAL = N
다음은 HMSSUBSCFG에 설정한 환경설정 예제이다.
[TOPIC1] Durable0:listener: Durable1:listener: Durable2:listener: