52
Tmax RQ Programming Guide Copyright © 2000 TmaxSoft Co., Ltd. All Rights Reserved

Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

  • Upload
    others

  • View
    16

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide

Copyright © 2000 TmaxSoft Co., Ltd. All Rights Reserved

Page 2: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 1

Copyright Notice Copyright©2000 TmaxSoft Co., Ltd. All Rights Reserved. TmaxSoft Co., Ltd. 대한민국 서울시 강남구 대치동 946-1 글라스타워 18 층 우)135-708 Restricted Rights Legend This software and documents are made available only under the terms of the TmaxSoft License Agreement and may be used or copied only in accordance with the terms of this agreement. No part of this document may be reproduced, transmitted, or translated in any form or by any means, electronic, mechanical, manual, or optical, without the prior written permission of TmaxSoft Co., Ltd. 소프트웨어 및 문서는 오직 TmaxSoft Co., Ltd.와의 사용권 계약 하에서만 이용이 가능하며, 사용권 계약에 따라서 사용하거나 복사 할 수 있습니다. 또한 이 매뉴얼에서 언급하지 않은 정보에 대해서는 보증 및 책임을 지지 않습니다. 이 매뉴얼에 대한 권리는 저작권에 보호되므로 발행자의 허가 없이 전체 또는 일부를 어떤 형식이나, 사진 녹화, 기록, 정보 저장 및 검색 시스템과 같은 그래픽이나 전자적, 기계적 수단으로 복제하거나 사용할 수 없습니다. Trademarks Tmax, WebtoB, WebT, and JEUS are registered trademarks of TmaxSoft Co., Ltd. All other product names may be trademarks of the respective companies with which they are associated. Tmax, WebtoB, WebT, JEUS 는 TmaxSoft Co., Ltd.의 등록 상표입니다. 기타 모든 제품들과 회사 이름은 각각 해당 소유주의 상표로서 참조용으로만 사용됩니다. Tmax RQ Programming Guide

Document Edition Date Version

TMRQ-0107-05-400 Jan 7, 2006 Tmax 4.0

Tmax 제품은 아래 표와 같습니다. 본 서는 Tmax Standard 와 옵션중에 굵게 기울임꼴로 인쇄되어 있는 내용을

포함하고 있습니다.

Tmax Standard TP Function + 2 Phase Commit

Tmax Options Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-

Link, Power Builder Interface Module, SERIAL Gateway,

Page 3: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 2

TCP/IP Service Gateway

이 책에 관하여…

본 지침서는 중요도가 높은 작업에 대한 서비스 요구들을 디스크에 저장하여 만일의 사태에도 신뢰성 있는 작업의 복구와 재수행을 가능케 하기 위해 Tmax 가 제공하는 RQ(Reliable Queue)에 대한 전반적인 지식과 사용법을 설명한다. 개발자들에게는 RQ 를 설정하는 방법과 이를 이용한 어플리케이션 개발의 기본적인 가이드 라인을 제시하며 또한 관리자들을 위한 관리툴의 사용법을 포함한다. Chapter 1 Tmax 의 강력한 기능 중에 하나인 RQ 프로세스에 대한 특징과 필요성, 구성 그리고 사용 방법, 사례와 사용 예제에 대해 소개한다. Chapter 2 RQ 프로세스를 사용하기 위한 환경설정과 컴파일하는 방법, 사용되는 함수들에 대해 설명한다. Chapter 3 RQ 프로세스를 사용하고 있는 실제 사례를 들어 중요한 업무의 신뢰성에 RQ 프로세스가 어떻게 기여하고 있고 사용되는지 설명한다. 관련서

Tmax Getting Started Guide Tmax C Programming Guide Tmax Reference Manual Tmax Administration Guide

Page 4: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 3

차 례

Tmax RQ Programming Guide .................................................... 0

차 례................................................................................................. 3

1 RQ (Reliable Queue) 시스템의 개요........................................ 5

1.1 RQ 의 개요 ............................................................................................................. 5

1.2 RQ 의 구조 ............................................................................................................. 6

1.3 RQ 시스템 운영의 개요.......................................................................................... 7

1.4 RQ 복구 작업.......................................................................................................... 9

2 RQ 시스템의 구성 .................................................................... 11

2.1 RQ 파일 시스템 .................................................................................................... 11

2.2 RQS....................................................................................................................... 11

2.3 RQ API .................................................................................................................. 12

3 RQ 의 사용 ............................................................................... 22

3.1 RQ 환경설정 ......................................................................................................... 22

2. RQ 프로그래밍의 기본.................................................................................................... 26

3.2 RQ 프로그래밍의 응용 ......................................................................................... 30

4 RQ 관리 .................................................................................... 39

1. RQ의 시동 및 종료 ........................................................................................................ 39

2. RQ 상태정보 관리 ........................................................................................................... 40

Page 5: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 4

5 부록............................................................................................ 43

5.1 tmaxapi.h.............................................................................................................. 43

INDEX............................................................................................. 48

Page 6: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 5

1 RQ (Reliable Queue) 시스템의 개요

Tmax RQ 시스템은 클라이언트가 보낸 서비스 요청 메시지나 서비스 수행결과를 물리적 매체(디스크) 혹은 가상 매체(메모리)에 기록하거나 읽어들이고 이를 운용/관리하는 모든 API 와 명령어를 포함한다. RQ 를 사용함으로써 만일의 사태에도 사용자의 서비스 요청및 서비스 수행 결과를 잃어버리지 않으며 미처리된 작업도 다시 재개할 수 있게 된다.

RQ 의 개요

RQ 의 구조

RQ 시스템 운영의 개요

장애발생시의 복구 작업

1.1 RQ 의 개요

클라이언트의 서비스 요구가 집중되어 요구된 서비스를 즉시 처리하지 못하고 내부 큐에 적체된 상태에서 시스템의 장애나 에러로 인하여 시스템이 비정상적으로 종료되는 경우, 모든 서비스 데이터는 삭제된다. 이러한 경우 신뢰성이 보장되어야 하는 서비스는 정상적인 업무가 이루어 질 수 없다.

이러한 문제점을 보완하기 위하여 Tmax 시스템은 대외 기관과의 연동 업무같이 신뢰성이 보장되어야 하며 업무의 특성상 거래 시간이 일반적인 온라인성 업무와 달리 많은 시간이 소요되는 서비스를 처리하기 위해 RQ (Reliable Queue)를 제공한다. RQ 는 안정적인 서비스를 보장하기 위해 클라이언트의 요청을 디스크에 관리한다.

Page 7: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 6

또한 RQ 는 일반적인 메시지 큐로써 클라이언트간 혹은 서버간 피어-투-피어 통신을 위해 사용될 수 있다.

1.2 RQ 의 구조

RQ 는 Request, Reply, Fail 의 세종류의 큐로 구분되어 있다.

Request 큐

서비스를 수행하기 전에 tpenq()된 요청 데이터는 모두 Request 큐에 저장된다.

Reply 큐

정상적으로 서비스를 수행하여 리턴된 데이터는 서비스 성공이나 실패에 무관하게 모두 Reply 큐에 저장된다. 특별한 예외로 서비스 이름을 명시하지 않은 데이터는 곳바로 이곳으로 저장된다.

Page 8: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 7

Fail 큐

서비스 수행에 실패하였거나 수행되기 전에 종료된 RQ 데이터들은 Fail 큐에 저장된다. Fail 큐에 데이터가 저장되는 다음과 같은 경우이다.

1. tpenq() 된 데이터가 서버로부터 정상적인 리턴결과를 받지 못했을 경우.

- 해당 서비스가 없는 경우.

- 서비스에서 정상적으로 리턴되지 않은 경우(에러 상황).

2. Request 큐에 데이터가 있는데 Tmax 시스템이 재시동 되었을때 RQ 타입이 WARM booting 일 경우 이 데이터들은 모두 Fail 큐로 옮겨진다.

1.3 RQ 시스템 운영의 개요

아래의 그림은 기본적인 RQ 시스템의 흐름도로써 클라이언트에서 RQ 를 통해 서비스를 요청하고 그 결과값을 RQ 를 통해 받아가는 일반적인 사용법을 보여준다.

Page 9: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 8

그림 1-1 RQ 흐름도

위 그림의 순서는 다음과 같다.

클라이언트에서 ATTACK 이라는 서비스를 tpenq()로서 요청한다.

클라이언트의 요청을 받은 Tmax 시스템 핸들러(이하 CLH)는 tpenq()에 대한 처리를 RQ 관리자(이하 RQS)에게 의뢰한다.

RQS 는 주어진 서비스를 Request 큐(Disk)에 기록한다.

RQS 는 CLH 에게 정상적으로 Request 큐에 서비스를 입력했다는 결과를 전송한다.

CLH 는 클라이언트에게 서비스 요청에 대한 응답으로 정상적으로 처리되었다는 결과를 전송한다.

RQS 는 CLH 에게 서비스의 처리를 요청한다.

Page 10: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 9

CLH 는 요청받은 서비스(ATTACK)를 수행한다.

해당 서비스(ATTCK)가 루틴을 수행 후 tpreturn()을 한다.

서비스(ATTCK)의 결과를 받은 CLH 는 그 결과를 RQS 로 전송한다.

서비스 처리 결과를 받은 RQS 는 정상적으로 처리된 경우에는 Reply 큐에 기록하며 실패한 경우에는 Fail 큐에 기록한다.

클라이언트는 해당 서비스 명(ATTACK)으로 tpdeq()를 요청한다.

CLH 는 RQS 에게 처리 결과를 요청한다.

RQS 는 디스크 내용에 대한 최신 정보를 메모리에 유지함으로써 추가적인 디스크 I/O 없이 응답을 CLH 에 전송한다.

CLH 는 응답을 클라이언트에게 전송한다.

위에서 보는 바와 같이 RQ 를 사용하면 신뢰성은 보장할 수 있지만 Disk 에 데이터를 기록하기 때문에 그만큼의 속도는 저하될 수 있다. 따라서 신뢰성이 보장되어야하고 시간이 많이 걸리는 작업인 경우에 한해서 RQ 를 사용하는 것이 바람직하다.

1.4 RQ 복구 작업

RQ 에 저장된 데이터는 시스템 장애 및 네트웍 불안정 등으로 Tmax 시스템이 재시동 되더라도 다시 사용할 수 있다. 데이터 복구를 위해서는 환경파일에 설정이 되어 있어야 한다. 자세한 사항은 “III. 3. RQ 프로그래밍의 응용” 절의 예제를 참고하기 바란다. 복구될 때 Request 큐에 쌓여있던 데이터와 Fail 큐에 쌓여있던 데이터는 Fail 큐로 옮겨지며 Reply 큐에 쌓여있던 데이터는 그대로 Reply 큐에 위치 한다. 이 데이터들은 다시 꺼내어 서비스를 수행하게 하거나 다른 용도로 사용할 수 있다.

Page 11: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 10

그림 1-2 시스템 Fail 시의 RQ

Page 12: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 11

2 RQ 시스템의 구성

RQ 시스템은 RQ 를 관리하는 RQS, 실제 데이터가 저장되는 RQ 파일 시스템, RQ 시스템을 사용하는 어플리케이션을 위한 RQ API, RQ 시스템의 사용 정보와 간단한 관리 기능을 제공하는 tmadmin 네가지로 이루어 진다. tmadmin 에 관한 내용은 “IV. RQ 시스템의 관리” 을 참조한다.

RQ 파일 시스템

RQS

RQ API

2.1 RQ 파일 시스템

Tmax RQ 시스템은 특별한 raw device 를 사용하지 않는다. RQ 시스템이 기동되면 Tmax 는 사용자가 지정한 디렉토리에 16~2047 MB 의 파일을 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ 명을 이용하여 RQ 명.data 라는 파일명으로 생성된다. 사용자는 RQ 데이터 파일의 크기와 시스템이 종료된후 데이타가 남은 상태의 RQ 파일을 재사용할 것인지 등을 지정할 수 있다.

현재 Tmax 버전에서는 RQ 데이터 파일의 크기가 자동적으로 조절되지 않으므로 사용자가 적절한 값을 지정해야 한다.

2.2 RQS

RQS 는 CLH(클라이언트 메니저)의 제어를 받으며 실제 RQ 파일에 데이터를 저장하고 읽어 들이는 모든 과정을 관리하고 제어한다. RQS 는 자체적인 버퍼를 가지고 실제 디스크에 저장된 데이터와 동기화된 데이터를 유지하여 RQ 를 사용하는 서비스의 수행에 있어 캐싱 기능을

Page 13: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 12

제공한다. 사용자는 RQS 가 디스크에 데이터를 저장하는 방법을 지정할 수 있다.

2.3 RQ API

RQ 를 사용하는 API는 크게 두가지로 나눌수 있다. 첫번째는 RQ를

직접적으로 사용하기 위한 API들이고 두번째는 RQ 사용을 보조하

기 위한 API들이다. 전자에는 tpenq(), tpdeq(), tpreissue(),

tpsubscribe(), tpmcall() 등이 해당되며 후자에는 tpextsvcname(),

tpextsvcinfo(), tpqstat(), tpqsvcstat() 등이 여기에 포함된다. 여기

에서는 대표적인 API들 만을 간략하게 설명하며 각 API들에 대한

자세한 설명과 예제는 Tmax Reference Manual 을 참고하도록 한다.

2.3.1 tpenq

int tpenq(char *qname, char *svc, char *data, long len, long flags)

qname 데이터를 저장할 RQ 의 이름을 지정한다. 이 이름은 Tmax 환경파일에 등록된 이름이어야 한다.

svc

NULL 또는 Tmax 환경파일에 등록된 서비스 이름을

지정한다.

NULL이 지정된 경우 Reply 큐에 데이터가 기록된다.

따라서 tpdeq() 로 해당 데이터를 얻어 온 후 처리해야

한다. 서비스 이름이 지정된 경우 Request 큐에

Page 14: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 13

데이터가 기록된 후 해당 서비스가 처리된다. svc로

명명된 서비스가 없거나 서비스가 실패한 경우 또는

서비스를 수행하고 처리 결과를 받지 않은 상태에서

시스템 장애가 발생할 경우에 이 데이터는 내부적으로

Fail 큐에 저장된다

data

서비스를 호출 할 때 전달되어야 하는 데이터를

지정한다. NULL로 들어가는 경우를 제외하면 반드시

tpalloc() 으로 할당된 버퍼에 대한 포인터이어야 한다.

len data 의 길이를 지정한다.

flags TPRQS, TPNOREPLY, TPFUNC, TPNOFLAGS 가 지정될 수

있다. 자세한 사항은 아래와 같다.

TPRQS

tpenq()의 첫번째 인자를 서비스 이름으로

호출하는 경우 TPRQS인자가 지정된다면

Request 큐에 기록되고 해당 서비스가

호출되어 수행 된 후 Reply 큐에

결과값이 기록된다. tpenq()의 첫번째

인자를 NULL로 호출하는 경우는 Reply

큐에 데이터가 기록된다.

Page 15: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 14

TPNOREPLY

tpenq()의 첫번째 인자가 NULL이 아닌

서비스 이름으로 지정된 경우 해당

서비스를 수행 한 후 그 결과를 Reply

큐에 저장하지 않는다.

TPFUNC

tpenq()의 첫번째 인자를 서비스 이름으로

호출하는 경우 Reply 큐에 데이터가

기록되고 서비스를 호출하지 않는다.

TPNOFLAGS

tpenq()의 첫번째 인자가 NULL이 아닌

서비스 이름으로 지정된 경우 해당

서비스를 수행 한 후 서버가 리턴한

(TPSVCSUCCESS 나 TPSVCFAIL에

관계없이) 결과는 클라이언트의 버퍼에

저장된다. 이 값을 받아오기 위해서는

tpdeq()시에도 플래그를 TPNOFLAGS로

주어야 한다. 서버가 결과값을 리턴하기

전에 에러가 발생하면 데이터는 Fail

큐에 저장되며 이값은 tpdeq()시에

TPRQS플래그로 받아와야 한다..

Page 16: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 15

서비스 요청 데이터를 RQ에 저장하는 함수이다. tpenq() 의 두번째

인자를 지정하면 데이터는 Request큐에 저장되며, 두번째 인자를

NULL을 지정하면 데이터는 Reply큐에 저장된다. Fail 큐에는

tpenq()를 사용하여 인위적으로 데이터를 저장할 수 없다.

또한 tpenq() 로 저장된 데이터들은 도착 순서에 따라 링크드 리스

트로 관리되며 데이터를 읽을때는 들어온 순서대로 처리 된다

(FIFO). 현재 Tmax 버전은 LIFO나 우선순위 처리를 지원하지 않는

다.

2.3.2 tpdeq

int tpdeq(char *qname, char *svc, char **data, long *len, long

flags)

qname 데이터를 수신할 RQ 의 이름을 지정한다. 이 이름은 Tmax 환경파일에 등록된 이름이어야 한다.

svc

tpenq()시에 두번째 인자로 지정된 값을 설정한다. tpenq()의

두번째 인자가 서비스 명인 경우 Reply 큐에서 같은 서비스

명을 가진 데이터들을 순차적으로 수신한다. 만약 tpenq()의

두번째 인자가 NULL이었다면 Reply 큐에서 서비스 명이

NULL인 데이터들을 순차적으로 수신한다.

또한 이 값을 _rq_sub_queue_name[TMAX_FAIL_QUEUE]으로

Page 17: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 16

지정하면 Fail 큐에 있는 데이터를 수신할 수 있다.

data RQ에 저장된 데이터를 받아 올 버퍼를 지정한다. 반드시

tpalloc()으로 할당된 버퍼에 대한 포인터이어야 한다.

len

tpdeq()가 성공적으로 수신한 데이터의 길이이다. tpdeq()는

필요하다면 응답 내용이 지정된 버퍼에 수신될 수 있도록 버퍼

크기를 증가시킨다.

flags TPRQS, TPFUNC, TPNOFLAGS 가 지정될 수 있다. 자세한 사항은

아래와 같다.

TPRQS Reply 큐에서 데이터를 수신하고자 할 때 지정된다.

TPFUNC

tpenq()시 TPFUNC로 플래그를 지정한 경우

Reqly 큐에 저장된 데이터를 수신하고자 할 때

TPRQS와 함께 지정된다.

Page 18: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 17

TPNOFLAGS

tpenq()시에 svc 에 서비스 이름을 지정하고 flags

값을 TPNOFLAGS로 지정한 경우 그 결과값을

클라이언트의 버퍼에 송신하게 된다. 이런 경우

tpdeq()시에도 그 결과값을 수신하기 위해서는

flags값을 TPNOFLAGS로 지정해야 한다.

RQ 에 저장된 데이터를 읽을때 사용하는 함수이다. tpdeq()를 읽어온 데이터는 RQ 에서 제거되기 때문에 한번 수신한 데이터를 다시 읽을 수는 없다. tpenq() 에서 설명한 대로 먼저 저장된 데이터 부터 순서대로 읽어온다.

2.3.3 tpreissue

tpreissue(char *qname, char *filter, long flags)

qname 데이터를 수신할 RQ 의 이름을 지정한다. 이 이름은 Tmax 환경파일에 등록된 이름이어야 한다.

filter 현재 지원하지 않으며 NULL 로 지정한다.

flags 현재 지원하지 않으며 TPNOFLAGS 로 지정한다.

Fail 큐에 있는 데이터를 읽어 해당 서비스의 Request 큐에 넣어준다. 서버로 부터 리턴받은 결과 데이터는 Replay 큐에 저장된다. 현재 버전에서는 한번에 하나씩 Fail 큐의 데이터를 처리 한다.

Page 19: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 18

2.3.4 tpextsvcname

int tpextsvcname(char *data, char *svc)

data tpdeq()로 RQ로부터 읽은 데이터가 저장되어 있는

포인터로 tpalloc()으로 할당된 주소값을 사용한다.

svc 알아오고자 하는 서비스 명이 수신될 버퍼이다.

tpdeq()로 RQ 에서 데이터를 읽은 경우, 해당 데이터의 서비스명을 알고자 할 때 사용하는 함수이다. 이 함수는 보통 Fail 큐에 저장되어 있는 데이터를 tpdeq()로 읽은 경우에 사용한다.

2.3.5 tpextsvcinfo

int tpextsvcinfo(char *data, char *svc, int *type, int *errcode)

data tpalloc 으로 할당되어 tpdeq 로 RQ 로부터 읽은 데이터가

저장되어 있는 포인터이다.

svc 알아오고자 하는 서비스 명이 수신될 버퍼이다.

type tpenq 의 결과값이 수신될 변수이다.

결과 값은 TPREQ, TPSUCCESS, TPERR, TPFAIL 중 하나이다. 이 결과값에 대한 자세한 설명은 아래와 같다.

Page 20: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 19

TPERR(-1) tpenq 가 실패하여 Fail 큐에 송신 된 경우

이와 같이 type 에 TPERR 이 설정된다.

TPREQ(0) tpenq 시에 두번째 인자로 NULL 을 지정한

경우 tpenq 가 정상적으로 된 경우 이와

같이 type 에 TPREQ 가 설정된다.

TPFAIL(1) tpenq 시에 두번째 인자로 서비스 명을

지정한 경우 서비스에서 tpreturn 의 첫번째

인자로 TPFAIL 이 호출된 경우에 이와

같이 type 에 TPFAIL 이 설정된다.

TPSUCCESS(2) tpenq 시에 두번째 인자로 서비스 명을

지정한 경우 서비스에서 tpreturn 의 첫번째

인자로 TPSUCCESS 가 호출된 경우에 이와

같이 type 에 TPSUCCESS 가 설정된다.

errcode 서비스 에러 코드값이 저장되는 변수이다. tpenq()

플래그를 TPNOFLAGS 로 주고 서비스 수행에 성공한

데이터는 서버로 부터 받은 urcode값을 갖고있다.

tpdeq()로 RQ 에서 데이터를 읽은 경우, 해당 데이터의 상세한 정보를 알고자 할 때 사용하는 함수이다.

2.3.6 tpqstat

int tpqstat(char *qname, long flags)

Page 21: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 20

qname 통계값을 수신 할 RQ 의 이름을 지정한다. 이 이름은 Tmax 환경파일에 등록된 이름이어야 한다.

flags 이 flags 에 지정된 값을 통해 Request, Reply, Fail 큐의

세부분의 통계값을 수신할 수 있다. 값은 다음과 같다.

0(TMAX_ANY_QUEUE) Request, Reply, Fail 큐의 통계를

낸다.

1(TMAX_FAIL_QUEUE) Fail 큐의 통계를 낸다.

2(TMAX_REQ_QUEUE) Request 큐의 통계를 낸다.

3(TMAX_RPLY_QUEUE) Reply 큐의 통계를 낸다.

현재 큐에 저장된 데이터의 통계 값을 반환하는 함수이다. 즉, 현재 RQ 에 적체되어있는 데이터의 통계를 구한다.

2.3.7 tpqsvcstat

int tpqsvcstat(char *qname, char *svc, long flags)

qname 통계값을 수신 할 RQ 의 이름을 지정한다. 이 이름은 Tmax 환경파일에 등록된 이름이어야 한다.

Page 22: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 21

svc 해당하는 서비스의 이름을 지정한다.

flags 이 flags 에 지정된 값을 통해 Request, Reply, Fail 큐의

세부분의 통계값을 수신할 수 있다. 값은 다음과 같다.

0(TMAX_ANY_QUEUE) Request, Reply, Fail 큐의 통계를

낸다.

1(TMAX_FAIL_QUEUE) Fail 큐의 통계를 낸다.

2(TMAX_REQ_QUEUE) Request 큐의 통계를 낸다.

3(TMAX_RPLY_QUEUE) Reply 큐의 통계를 낸다.

현재 큐에 저장된 데이터의 통계 값을 서비스 별로 반환하는 함수이다. 즉, 현재 RQ 에 적체되어있는 데이터의 통계를 구한다.

Page 23: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 22

3 RQ 의 사용

RQ 시스템을 어플리케이션 개발에 적용하기 위해서는 Tmax 환경파일에 RQ 를 설정하는 과정과 실제 프로그램을 개발하는 두단계의 과정을 거쳐야 한다. 본 장에서는 이들 과정에 대한 설명과 함께 다양한 예제를 제시하여 어플리케이션을 개발에 있어 RQ 의 응용법에 대한 예를 보이고자 한다.

RQ 환경설정

RQ 프로그래밍의 기본

기본적인 작동

RQ 프로그래밍의 응용

UCS 를 이용한 서비스

시스템 장애후의 Fail 큐 복구

3.1 RQ 환경설정

실제 어플리케이션 개발에 앞서 RQ 시스템을 시작하기 위해서는 기본적인 설정이 필요하다. RQ 시스템은 서버 그룹단위로 관리되며 Tmax 환경파일에 SVRGROUP 절과 RQ 절의 적절한 정의를 필요로 한다.

Tmax 환경파일 설정에 더 자세한 사항은 Tmax Administration Guide 를 참조하기 바란다.

3.1.1 SVRGROUP

RQ 시스템을 사용하기 위해서는 RQ 가 속하는 서버그룹을 정의해야 하며 이를 위해 SVRGROUP 절의 기본 필수항목들 외에도 SVGTYPE 항목을 RQMGR 로 지정해 주어야 한다. 이 외에도 CPC 등을 설정하여 시스템 운영의 효율을 높일수 있다.

Page 24: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 23

SVRGROUP 명

서버그룹의 이름을 설정한다.

크기는 15 자 이내이고 SVRGROUP 절 내에서 유일한

이름이어야 한다.

NODENAME 서버그룹이 속한 노드이름을 설정한다.

NODE 절에서 정의한 노드이름이어야 한다.

CPC

RQS 프로세스와 CLH 프로세스 사이의 병렬통신

채널 수를 지정하는 항목 RQ 를 사용하지 않으면

무시된다. 4~128 까지의 값을 설정한다.

RQ 의 사용이 빈번할 경우 다중의 채널을

유지함으로써 처리속도를 향상시킬 수 있다.

SVGTYPE 서버그룹의 타입을 정의하는 항목으로 RQ 를 사용할

경우 RQMGR 이라 지정해야 한다.

3.1.2 RQ

각 서버 그룹은 하나 이상의 RQ 를 두고 사용할 수 있다. RQ 절에는 실제 RQ 를 관리하는 방법에 대한 설정을 한다. RQ 절의 항목에는 QSIZE, FILEPATH, BOOT, FSYNC, BUFFERING 등이 있으며 이 중 SVGNAME 은 반드시 설정해 주어야 한다.

RQ 명 RQ 절에 대한 논리적인 이름이다. RQ 절 내에서 여러

개의 RQ 정의가 가능하며, 각각의 RQ 이름은 유일한

값이어야 한다. 또한 한 서버 그룹에 한개 이상의

Page 25: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 24

RQ 를 정의할 수 있다.

크기는 15 자 이내이어야 한다.

SVGNAME RQ 를 사용하는 서버그룹 이름을 설정한다.

SVRGROUP 절에서 정의한 서버그룹 이름이어야 한다.

QSIZE

RQ 의 크기를 지정하여 사용할 수 있다.

기본값은 16Mbyte 이고 범위는 1~2047Mbyte 이다.

RQ 는 기본적으로 TMAXDIR 의 path 디렉토리에

생성되며 지속적인 서비스 결과, 지정된 큐의 크기를

넘는 경우에는 tpenq()시에 TPEQFULL 에러가

설정된다. RQ 의 크기는 자동으로 증가하지 않으므로

RQ 가 정의한 크기를 초과하여 에러가 발생할 것을

막기위해 적당한 크기로 설정해야 한다.

RQ 파일을 작성한 후에도 RQ 데이터가 저장되지

않으면 Tmax 가 종료될 때 파일이 자동으로 삭제된다.

FILEPATH

RQ에서 사용되는 파일 위치를 지정한다. 기본값은

$(TMAXDIR)/path/RQ명.data 이다.

이 필드는 RQ 데이터 파일을 생성하며 이는 전체

파일 이름과 디렉토리 이름으로 정의 되어야 한다.

BOOT

BOOT 필드는 Tmax 시스템 재부팅 시, RQ 에 저장된

데이터를 조절한다. BOOT 항목이 WARM 인 경우, 시스템 장애복구 후에 큐에 쌓였던 데이터의 복구가

가능하게 된다. 그러나 COLD 로 설정되어 있으면, Tmax 시스템이 다시 기동 될 때 디스크에 저장된

Page 26: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 25

데이터는 지워진다.

기본값은 COLD 이다.

FSYNC

아래의 항목인 BUFFERING 을 N 으로 설정하더라도

OS 는 데이터를 바로 디스크에 저장하는 것이 아니고

최장 30 초 동안 메모리에 보관한다. 이 러한 대기

시간을 없애고 바로 메모리의 데이터를 디스크에

저장하도록 하는 항목이다. 이 항목이 NO 이면 시스템

장애 발생 시 데이터를 잃을 가능성이 있지만 RQ 처리

속도는 빨라진다. 이 항목이 Y 일 때는 RQ 데이터가

메모리를 사용하지 않고 항상 디스크에 안전하게

저장되지만 NO 를 설정 했을 때보다 처리 속도가

늦어진다.

기본값은 Y 이다.

BUFFERING

RQ 파일 내용을 메모리에 캐쉬(cache) 할지 여부를

지정한다. N 으로 지정하면 RQ 처리가 상대적으로

느려지나 요구되어지는 메모리가 작아진다.

기본값은 Y 이다.

참고) TMAXDIR 은 Tmax 를 설치한 홈 디렉토리를 뜻한다. 이후 Tmax 홈 디렉토리를 TMAXDIR 라고 칭한다.

3.1.3 Tmax 환경파일 예제

*DOMAIN

tmax ...

*NODE

tmax1 ...

Page 27: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 26

*SVRGROUP

svg1 NODENAME = tmax1,

CPC = 4,

SVGTYPE=RQMGR

*RQ

rqtest SVGNAME = svg1,

BOOT = COLD,

QSIZE = 1024,

BUFFERING = Y,

FSYNC = Y,

FILEPATH = "/user1/tmax/myrq.data"

*SERVER

...

*SERVICE

2. RQ 프로그래밍의 기본 RQ 프로그램의 동작은 기본적으로 비동기형 통신과 유사하다. 클라이언트는 tpenq()로 서비스를 호출하며 tpdeq()로 결과값을 받아온다. tpenq()의 플래그를 TPNOFLAGS 로 주었을 경우 이 과정은 거의 동일하다(에러 발생시의 과정은 “II. 3. RQ API” 절의 tpenq() 에 대한 설명을 참조한다).

그러나 tpenq()의 플래그가 TPNOFLAGS 가 아닐 경우 서비스 결과값은 클라이언트가 아닌 서버측의 RQ 데이터 파일에 저장된다. 즉 클라이언트는 서비스 수행의 완료를 tpsleep()등을 통해 확인할 수 없다. 개발자는 서비스 완료의 시점을 알아야 할 필요가 있다면 TPNOFLAGS 를 설정하여 사용하거나 또는 다른 API 들을 이용하여 구현할 수 있다. 자세한 내용은 Tmax C Programming Guide 를 참조한다.

Page 28: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 27

3.1.4 유의 사항

TPNOFLAGS 이외의 플래그를 사용할 경우 서버에서 넘겨주는 urcode 값은 무시된다.

RQ 에 관련된 작업들은 현재 버전의 Tmax 에서는 트랜잭션의 범주에 들지 않는다.

3.1.5 기본적인 작동

RQ 시스템을 사용하는 가장 기본적인 형태의 프로그램으로 클라이언트는 하나의 RQ 를 이용하여 tpenq()로 서비스를 호출하고 tpdeq()로 결과값을 받아온다

3.1.5.1 프로그램 개요

아래의 예제는 클라이언트가 tpenq()와 tpdeq()를 이용해서 서비스 결과를 받아오는 기초적인 RQ 프로그램이다. 서비스 이름을 명시하고 플래그는 TPRQS 를 사용했으며 클라이언트는 tpqstat()을 사용하여 replay 큐에 적체되어 있는 결과 데이터들을 읽어온다. 이렇듯 서비스 이름을 명시하여 RQ 를 사용할 경우 서비스의 스케줄링은 각각의 서비스별로 일어나며 tpenq()로 저장된 순서와는 다를 수 있다.

Page 29: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 28

3.1.5.2 Architecture

그림 3-1 tpenq 를 서비스 명으로 호출

3.1.5.3 Tmax 환경파일

*DOMAIN

tmax SHMKEY=88000,

TPORTNO = 8888

*NODE

tmax1 TMAXDIR="/user1/tmax",

APPDIR="/user1/tmax/appbin"

*SVRGROUP

svg1 NODENAME = tmax1,

CPC = 4,

SVGTYPE=RQMGR

*RQ

rqtest SVGNAME = svg1

*SERVER

Page 30: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 29

svr SVGNAME = svg1

*SERVICE

SERVICE SVRNAME = svr

3.1.5.4 client program

#include <stdio.h>

#include <usrinc/atmi.h>

#include <usrinc/tmaxapi.h>

int main(int argc, char *argv[])

{

char *buf;

long rlen;

int rqcount, i;

if (argc != 2){

error procesing

}

if (tpstart((TPSTART_T *)NULL) == -1){

error processing

}

buf = tpalloc("CARRAY", NULL, 0);

if (buf == NULL){

error processing

}

strcpy(buf, argv[1]);

if (tpenq("rqtest", "SERVICE", buf, strlen(buf), TPRQS) == -1){

error processing

}

...

Page 31: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 30

rqcount = tpqstat("rqtest", TMAX_RPLY_QUEUE);

for(i = 0;i < rqcount;i++){

...

if(tpdeq("rqtest", "SERVICE", &buf, &rlen, TPRQS) == -1){

error processing

}

...

}

tpfree((char *)buf);

tpend();

}

3.1.5.5 server program

#include <stdio.h>

#include <usrinc/atmi.h>

SERVICE(TPSVCINFO *msg)

{

int i;

...

tpreturn(TPSUCCESS,0,(char *)msg->data, 0,TPNOFLAGS);

}

3.2 RQ 프로그래밍의 응용

tpenq() – tpdeq() 라는 간단한 구조의 RQ 프로그램도 Tmax 의 다양한 프로세스 관리유형을 이용하여 개발한다면 그 사용 범위가 무척 다양해짐을 알 수 있을 것이다. 여기서는 Tmax 의 독자적인 방식인 UCS 방식을 이용한 다양한 프로그래밍 기법을 소개한다.

Page 32: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 31

3.2.1 UCS 를 사용한 RQ

클라이언트가 요청하는 일련의 작업들이 순서대로 수행되어야 할 필요가 있고 각 서버프로그램의 수행시간이 길 경우 클라이언트는 전체 서비스 기간 동안 블록 상태로 기다려야 한다. 하지만 RQ 를 이용한다면 클라이언트는 원하는 서비스 내용을 RQ 에 저장하고 바로 다음 작업을 할 수 있으며 서버에서는 서비스 요청 내용을 RQ 로 부터 순서대로 읽어서 수행할 수 있다.

3.2.1.1 프로그램 개요

클라이언트에서 원하는 서비스명과 데이터를 구조체에 저장하여 여러번 tpenq()를 하며 이때 서비스 이름은 NULL 을 준다. 이 데이터들은 Reply 큐에 쌓이게 되며 UCS 서버에서는 여기에서 데이터를 읽어 해당 서비스로 데이터를 보내 서비스를 호출한다.

3.2.1.2 Architecture

그림 3-2 tpenq 를 NULL 로 호출

3.2.1.3 Tmax 환경파일

*DOMAIN

Page 33: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 32

tmax SHMKEY=88000,

TPORTNO = 8888

*NODE

tmax1 TMAXDIR="/user1/tmax",

APPDIR="/user1/tmax/appbin"

*SVRGROUP

svg1 NODENAME = tmax1,

CPC = 4,

SVGTYPE=RQMGR

*RQ

rqenq SVGNAME = svg1

rqdeq SVGNAME = svg1

*SERVER

svr1 SVGNAME = svg1

svr2 SVGNAME = svg1,

SVRTYPE = UCS

*SERVICE

SERVICE1 SVRNAME = svr1

SERVICE2 SVRNAME = svr1

SERVICE3 SVRNAME = svr1

3.2.1.4 client program

#include <stdio.h>

#include <sys/time.h>

#include <usrinc/atmi.h>

#include <usrinc/tmaxapi.h>

#include “../sdl/demo.s”

int main(int argc, char *argv[])

{

struct *buf1, *buf2, *buf3

Page 34: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 33

long rlen;

int rqcount, i;

struct timeval tval;

if (argc != 4){

error processing

}

if (tpstart((TPSTART_T *)NULL) == -1){

error processing

}

buf1 = (struct rqsvc *)tpalloc("STRUCT", “rqsvc”, 0);

buf2 = (struct rqsvc *)tpalloc("STRUCT", “rqsvc”, 0);

buf3 = (struct rqsvc *)tpalloc("STRUCT", “rqsvc”, 0);

if (buf1 == NULL || buf2=NULL || buf3==NULL){

error processing

}

strcpy(buf1->svc, “SERVICE1”);

strcpy(buf1->data, argv[1]);

strcpy(buf2->svc, “SERVICE2”);

strcpy(buf2->data, argv[2]);

strcpy(buf3->svc, “SERVICE3”);

strcpy(buf3->data, argv[3]);

/*서비스 명을 NULL 로 주어 Reply 큐에 데이터를 송신한다.*/

if (tpenq("rqenq", NULL, buf1, 0, TPRQS) == -1){

error processing

}

if (tpenq("rqenq", NULL, buf2, 0, TPRQS) == -1){

error processing

}

if (tpenq("rqenq", NULL, buf3, 0, TPRQS) == -1){

error processing

}

Page 35: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 34

tpfree((char *)buf1);

tpfree((char *)buf2);

tpfree((char *)buf3);

tpend();

}

3.2.1.5 server program

#include <stdio.h>

#include <usrinc/atmi.h>

#include <usrinc/ucs.h>

#include <usrinc/tmaxapi.h>

#include “../sdl/demo_sdl.h”

int usermain(int argc, char *argv[])

{

struct rqsvc *buf;

char *sndbuf;

long rlen;

int count, i, ret;

buf = (struct rqsvc *)tpalloc("STRUCT", “rqsvc”, 0);

if (buf == NULL){

error processing

}

sndbuf = tpalloc("STRING", NULL, 0);

if (sndbuf == NULL){

error processing

}

while(1){

tpschedule(10);

/*Reply 큐의 데이터 갯수를 알아낸다.*/

count = tpqstat("rqenq", TMAX_RPLY_QUEUE);

printf("count = %d\n", count);

for (i = 0; i < count ; i++){

/*Reply 큐에 있는 데이터를 중 서비스 명이 NULL 인 데이터를 */

Page 36: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 35

/*송신한다.*/

if (tpdeq("rqenq", NULL, (char **)&buf, &rlen, TPRQS) ==

-1){

error processing

}

buf=(struct rqsvc *)buf;

strcpy(sndbuf, buf->data);

/*순차적으로 서비스를 수행한다.*/

if (tpcall(buf->svc, sndbuf, 0, (char **)&buf, (long

*)&rlen, TPNOFLAGS) == -1){

error processing

}

...

}

}

return 1;

}

3.2.2 Fail 큐 복구

여러가지 원인으로 발생한 Fail 큐의 데이터는 상황에 따라 적절한 방식으로 처리해 주어야 한다. 가장 간단하게는 어드민 툴을 이용하여 큐의 내용을 지우는 방법도 있지만(“IV. 2. RQ 상태정보 관리” 절 참조) 사용자가 원하는 방식으로 처리해 주고 싶다면 이를 대행하는 프로그램을 만들어야 한다.

3.2.2.1 프로그램 개요

아래의 예제는 UCS 방식의 프로그램으로 10 초 간격으로 Fail 큐의 데이터를 읽어들이며 tpextsvcname() 으로 해당하는 서비스를 찾은후 특정 서비스의 데이터는 파기하고 나머지는 다시 해당 서비스의 Request 큐로 넣어준다. tpreissue() 는 데이터를 읽어서 해당 서비스로 보내는 과정을 한번에 해주지만 위와 같이 상황에 따라 다른 행동을 하는 경우는 사용할 수 없다.

Page 37: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 36

3.2.2.2 Architecture

그림 3-3 Fail 큐 복구

3.2.2.3 Tmax 환경파일

*DOMAIN

tmax SHMKEY=88000,

TPORTNO = 8888

*NODE

tmax1 TMAXDIR="/user1/tmax",

APPDIR="/user1/tmax/appbin"

*SVRGROUP

svg1 NODENAME = tmax1,

CPC = 4,

SVGTYPE=RQMGR

*RQ

rqtest SVGNAME = svg1, BOOT = WARM

Page 38: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 37

*SERVER

svr1 SVGNAME = svg1

svr2 SVGNAME = svg1

svr3 SVGNAME = svg1,

SVRTYPE = UCS

*SERVICE

SERVICE1 SVRNAME = svr1

SERVICE2 SVRNAME = svr2

STOP SVRNAME = svr2

3.2.2.4 server program

#include <stdio.h>

#include <usrinc/atmi.h>

#include <usrinc/tmaxapi.h>

int usermain(int argc, char *argv[])

{

char *buf, svcname[16];

long rlen;

int failcount, i, ret;

buf = tpalloc("STRING", NULL, 0);

if (buf == NULL){

error processing

}

while(1){

tpschedule(10);

/*Fail 큐의 갯수를 알아낸다.*/

failcount = tpqstat("rqtest", TMAX_FAIL_QUEUE);

for (i = 0; i < failcount ; i++){

/*Fail 큐의 데이터를 수신한다.*/

if (tpdeq("rqtest", _rq_sub_queue_name[TMAX_FAIL_QUEUE],

&buf, &rlen, TPRQS) == -1){

Page 39: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 38

error processing

}

/*서비스 명을 알아온다.*/

if (tpextsvcname(buf, svcname) == -1){

error processing

}

/* 읽어온 데이터가 “STOP” 서비스 이면 skip 한다. */

if (strcomp(svcname, “STOP”)) {

/*해당 서비스 명으로 tpenq 한다.*/

ret=tpenq("rqtest", svcname, buf, rlen, TPRQS);

if (ret<0) {

error processing

}

}

}

}

return 1;

}

Page 40: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 39

4 RQ 관리

RQ 시스템의 관리는 일반 Tmax 시스템의 관리 방법과 크게 다르지 않다.관리자는 RQ 시스템을 따로 기동/종료 하거나 어드민 툴을 이용하여 RQ 의 상태정보를 확인할 수 있다. 본 장에서는 RQ 시스템을 시동/종료하고 간단히 어드민 툴을 이용하는 방법에 대해 설명한다.

RQ 의 시동 및 종료

RQ 상태정보 관리

1. RQ의 시동 및 종료 RQ 는 “tmboot” 명령어에 의해 Tmax 시스템과 함께 기동된다. 그러나 RQ 만을 독립적으로 기동하거나 종료할 때는 “tmboot –q RQ 관리 서버그룹 명” 또는 “tmdown –q RQ 관리 서버그룹 명” 으로 수행할 수 있다.

자세한 내용은 “Tmax Administration Guide”를 참조한다.

$ tmboot -T

그림 4 - 1 tmboot -T

위와 같이 “tmboot –T” 명령어로 Tmax 의 기본 엔진들만 기동시킨 경우 RQS 가 기동되지 않는다.

$ tmboot -q svg1

Page 41: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 40

그림 4 - 2 tmboot -q

위와 같이 “tmboot –q RQ 관리 서버그룹 명” 으로 RQ 를 관리하는 서버그룹에 해당하는 RQS 를 기동할 수 있다.

RQ 를 종료하고자 할때도 같은 방법으로

$ tmdown -q svg1

그림 4 - 3 tmdown -q

위와같이 “tmdown –q RQ 관리 서버그룹 명” 으로 RQ 를 관리하는 서버그룹에 해당하는 RQS 를 종료할 수 있다.

2. RQ 상태정보 관리 Tmax 시스템이 기동되면 Tmax 에서 제공하는 어드민 프로그램인 tmadmin 을 이용하여 시스템의 상태를 자세히 관리할 수 있다.

자세한 내용은 “Tmax Administration Guide”를 참조한다.

tmadmin 에서 RQ 와 관련한 명령으로는 rqs 가 있다. 이 rqs 는 현재 사용 가능한 RQ 의 상태를 출력하거나 디스크 큐에 쌓여있는 데이터를 조작할 수 있다. 이 rqs 의 옵션으로는 -l, -s, -c, -f 이 있다. 이에 대한 상세한 내용은 다음과 같다.

옵션 내용

-l Tmax 환경파일의 RQ 절에 정의된 모든 RQ 명을

출력한다.

-s RQ명 RQ 명으로 지정된 RQ 의 상태정보를 출력한다.

Page 42: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 41

Request, Reply, Fail 큐의 모든 상태를 출력한다.

-c RQ명 현재 Tmax 3.8 버전에서는 의미가 없는 옵션이다.

-f RQ명 RQ 이름으로 지정된 RQ 에 쌓인 데이터들을 모두

삭제한다.

단 이 옵션을 사용하기 위해서는 tmadmin 을 실행할때

–m 옵션으로 관리자 모드에서만 사용해야 한다.

tmadmin 의 실행 모드는 두가지가 있다. 하나는 tmadmin [–s] 로 실행되는 서브관리자 모드이고 다른 하나는 tmadmin –m 으로 실행되는 마스터관리자 모드이다. 서브 관리자의 경우 시스템 운영 상태를 확인할 수는 있지만 시스템 설정을 바꿀수는 없다.

tmadmin 상에서 RQ 의 상태정보를 출력하는 rqs –l 이나 rqs –s 같은 명령은 서브 관리자 모드로도 가능하지만 RQ 의 통계정보와 내용을 지우는 rqs –c, rqs –f 와 같은 명령은 마스터 관리자 모드로 실행해야만 가능하다.

$ tmadmin

그림 4 – 4 rqs -l, -s

$ tmadmin –m

Page 43: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 42

그림 4 – 5 rqs -f

Page 44: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 43

5 부록

좀더 자세한 정보를 원하는 사용자를 위해 RQ API 들의 원형과 시스템 변수를 선언한 헤더파일의 내용을 예시하였다. Tmax 가 제공하는 헤더 파일들은 TMAXDIR/usrinc 에 위치한다.

5.1 tmaxapi.h

/* --------------- usrinc/tmaxapi.h ------------------*/

/* */

/* Copyright (c) 2000 TmaxSoft Co., Ltd */

/* All Rights Reserved */

/* */

/* --------------------------------------------------*/

#ifndef _TMAXAPI_H

#define _TMAXAPI_H

#include <sys/types.h>

#include <usrinc/atmi.h>

#ifdef _WIN32

#include <winsock2.h>

#include <usrinc/svct.h>

#include <usrinc/sdl.h>

#else

#include <sys/socket.h>

#define __cdecl

#endif

/* client logout type */

#define CLIENT_CLOSE_NORMAL 0

#define CLIENT_CLOSE_ABNORMAL 1

Page 45: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 44

#define CLIENT_PRUNED 2

/* RQ Sub-queue type */

#define TMAX_ANY_QUEUE 0

#define TMAX_FAIL_QUEUE 1

#define TMAX_REQ_QUEUE 2

#define TMAX_RPLY_QUEUE 3

#define TMAX_MAX_QUEUE 4

extern char

_rq_sub_queue_name[TMAX_MAX_QUEUE][XATMI_SERVICE_NAME_LENGTH];

/* RQ related macros */

#define RQ_NAME_LENGTH 16

/* unsolicited msg type */

#define UNSOL_TPPOST 1

#define UNSOL_TPBROADCAST 2

#define UNSOL_TPNOTIFY 3

#define UNSOL_TPSENDTOCLI 4

/* Check SVCINFO cmds */

#define ISSVC_FORWARDED 0x00000001

#define ISSVC_NOREPLY 0x00000002

/* TPEVCTL ctl_flags */

#define TPEV_SVC 0x00000001

#define TPEV_PROC 0x00000002

struct tpevctl {

long ctl_flags;

long post_flags;

char svc[XATMI_SERVICE_NAME_LENGTH];

char qname[RQ_NAME_LENGTH];

};

typedef struct tpevctl TPEVCTL;

Page 46: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 45

typedef void __cdecl Unsolfunc(char *, long, long);

#define TPUNSOLERR ((Unsolfunc *) -1)

/* Multicast call related structures */

struct svglist {

int ns_entry; /* number of entries of s_list */

int nf_entry; /* number of entries of f_list */

int *s_list; /* list of server group numbers */

int *f_list; /* list of server group numbers */

};

#if defined (__cplusplus)

extern "C" {

#endif

/* ----- unsolicited messaging API ----- */

long __cdecl tpsubscribe(char *eventexpr, char *filter, TPEVCTL

*ctl, long flags);

int __cdecl tpunsubscribe(long sd, long flags);

int __cdecl tppost(char *eventname, char *data, long len, long

flags);

int __cdecl tpbroadcast(char *lnid, char *usrname, char *cltname,

char *data,

long len, long flags);

Unsolfunc *__cdecl tpsetunsol(Unsolfunc *func);

int __cdecl tpsetunsol_flag(int flag);

int __cdecl tpgetunsol(int type, char **data, long *len, long

flags);

int __cdecl tpclearunsol(void);

/* ----- RQS API -------- */

int __cdecl tpenq(char *qname, char *svc, char *data, long len,

long flags);

int __cdecl tpdeq(char *qname, char *svc, char **data, long *len,

long flags);

int __cdecl tpqstat(char *qname, long type);

int __cdecl tpqsvcstat(char *qname, char *svc, long type);

Page 47: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 46

int __cdecl tpextsvcname(char *data, char *svc);

int __cdecl tpextsvcinfo(char *data, char *svc, int *type, int

*errcode);

int __cdecl tpreissue(char *qname, char *filter, long flags);

char *__cdecl tpsubqname(int type);

/* ----- server API -------- */

int __cdecl tpgetminsvr(void);

int __cdecl tpgetmaxsvr(void);

int __cdecl tpgetmaxuser(void);

int __cdecl tpgetsvrseqno(void);

int __cdecl tpgetmysvrid(void);

int __cdecl tpgetmaxuser(void);

int __cdecl tpsendtocli(int clid, char *data, long len, long

flags);

int __cdecl tpgetclid(void);

int __cdecl tpgetpeer_ipaddr(struct sockaddr *name, int *namelen);

int __cdecl tpchkclid(int clid);

int __cdecl tmax_clh_maxuser(void);

int __cdecl tmax_chk_svcinfo(int cmd);

/* ----- etc API ----------- */

int __cdecl tp_sleep(int sec);

int __cdecl tp_usleep(int usec);

int __cdecl tpset_timeout(int sec);

int __cdecl tmaxreadenv(char *file, char *label);

char *__cdecl tpgetenv(char* str);

int __cdecl tpputenv(char* str);

int __cdecl tpgetsockname(struct sockaddr *name, int *namelen);

int __cdecl tpgetpeername(struct sockaddr *name, int *namelen);

int __cdecl tpgetactivesvr(char *nodename, char **outbufp);

int __cdecl tperrordetail(int i);

int __cdecl tpreset(void);

int __cdecl tptobackup();

struct svglist *__cdecl tpmcall(char *qname, char *svc, char *data,

long len, long flags);

struct svglist *__cdecl tpgetsvglist(char *svc, long flags);

Page 48: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 47

int __cdecl tpsvgcall(int svgno, char *qname, char *svc, char

*data, long len, long flags);

int __cdecl tpflush();

char *__cdecl tmaxlastsvc(char *idata, char *odata, long flags);

#ifndef _TMAX_KERNEL

/* ------- User supplied routines ---------- */

int __cdecl tpsvrinit(int argc, char *argv[]);

int __cdecl tpsvrdone();

void __cdecl tpsvctimeout(TPSVCINFO *msg);

#endif

/*

Internal functions: ONLY BE CALLED FROM AUTOMATICALLY

GENERATED STUB FILES. DO NOT DIRECTLY CALL THESE FUNCTIONS.

*/

int __cdecl get_clhfd(void);

#if defined(_WIN32)

int __cdecl _tmax_regfn(void *initFn, void *doneFn, void

*timeoutFn, void *userMainFn);

int __cdecl _tmax_regtab(int svcTabSz, _svc_t *svcTab, int

funcTabSz, void *funcTab);

int __cdecl _tmax_regsdl(int _sdl_table_size2, struct _sdl_struct_s

*_sdl_table2,

int _sdl_field_table_size2, struct _sdl_field_s

*_sdl_field_table2);

int __cdecl _tmax_main(int argc, char *argv[]);

int __cdecl _double_encode(char *in, char *out);

int __cdecl _double_decode(char *in, char *out);

#endif

#if defined (__cplusplus)

}

#endif

#endif /* end of _TMAXAPI_H */

Page 49: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 48

INDEX

Page 50: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data
Page 51: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

API

tpdeq............................................................................................................................ 14 tpenq.............................................................................................................................11 tpextsvcinfo ................................................................................................................. 16 tpextsvcname............................................................................................................... 16 tpqstat .......................................................................................................................... 18 tpqsvcstat..................................................................................................................... 18 tpreissue....................................................................................................................... 15

RQ 개요

RQ 매니저 ................................................................................................................. 10

RQ 파일 시스템 ....................................................................................................... 10

개요 ............................................................................................................................... 5

구조 ......................................................................................................................... 6, 10

RQ 관리...................................................................................................... 36

상태정보..................................................................................................................... 37

시동/종료.................................................................................................................... 36

RQ 프로그래밍

기본개념..................................................................................................................... 24

예제 ................................................................................................................. 24, 28, 32

유의사항..................................................................................................................... 24

흐름도........................................................................................................................... 7

복구작업

개요 ............................................................................................................................... 8

Page 52: Tmax RQ Programming Guide - TmaxSoft€¦ · 만들어 RQ 데이터 파일로 사용한다. RQ 데이터 파일은 Tmax 환경파일에 지정한 RQ명을 이용하여 RQ 명.data

Tmax RQ Programming Guide 1

예제 ............................................................................................................................. 32

환경설정

Example....................................................................................................................... 23 RQ ............................................................................................................................... 21 SVRGROUP ............................................................................................................... 20