이번 테스트는 장비 2곳 (클라이언트)에서 장비 1곳 (서버) 간 서비스를 호출하는 것으로 진행해보았습니다.
테스트 환경 : IBM AIX 7.2 , Oracle Linux 7.9
테스트 장비 : AIX 1번 장비 (server) , 2번 장비 (client) , LINUX (client)
진행 방법
AIX 1번 장비는 서비스를 제공하는 Server로서 Client(AIX 2번 장비, Linux)와 접속을 하기 위한 WSL 프로세스를 두 개 띄웠습니다.
WSL은 클라이언트와 서버 간 통신의 역할을 하는 프로세스 입니다. TCP/IP와 같습니다.
또한 실질적인 서비스를 가지고 있는 AP server 프로세스를 두개 띄우는 작업을 하였습니다.
각각의 서버에는 TOUPPER와 TOLOWER 서비스를 가지고 있습니다.
Client(AIX 2번 장비, Linux)는 Server(AIX 1번 장비)로 접속하기 위해 WSNADDR이라는 환경변수를 설정해주어야 합니다.
WSLADDR = //ip:port
이렇게 들어가고 싶은 서버의 주소와 포트에 해당하는 WSL에 socket을 연결을 하여 서버(AIX 1번 장비)와의 접속을 요청하게 되는 것이죠.
이 로직구성이 성공적으로 마치게 되면 클라이언트는 서버에 socket 연결이 되는 것이고
함수를 이용해 서비스를 호출을 할 수 있답니다.
더 이해하기 쉬우시도록 테스트 환경파일을 보여드리겠습니다.
1. 서버에서 클라이언트와 접속을 하기위해서는 가장 먼저 환경파일을 설정해주어야합니다.
tuxedo의 모든 구성은 ubbconfig 라는 환경변수 파일을 사용하여 구성하게 됩니다.
아래 코드도 모두 ubbconfig 환경변수파일 내 코드 입니다.
WSL (WorkStation Listener) 은 앞서 말씀드렸다시피 외부에서 접속하는 Client를 위해 TCP/IP 역할을 하는 통신 프로세스 입니다.
저는 외부에서 접속할 두 Client를 위해 WSL 포트를 두 곳으로 설정해주었습니다.
보통 포트의 범위는 달라야합니다. 이유는 무수히 많은 클라이언트가 WSL을 통해서 서버로 접속하게 될 경우
클라이언트 간 접속포트가 겹치게 되면 분명 에러가 날 것이기 때문입니다. 그러한 에러를 방지하기 위함으로 생각하시면 편합니다.
*RESOURCES
IPCKEY 123457
DOMAINID simpapp
MASTER simple
MAXACCESSERS 1000
MAXSERVERS 100
MAXSERVICES 500
MODEL SHM
LDBAL Y
*MACHINES
DEFAULT:
APPDIR="/ofm/jwchoi/sw/tp/tuxedo12.2.2.0.0/samples/atmi/simpapp"
TUXCONFIG="/ofm/jwchoi/sw/tp/tuxedo12.2.2.0.0/samples/atmi/simpapp/tuxconfig"
TUXDIR="/ofm/jwchoi/sw/tp/tuxedo12.2.2.0.0"
MAXWSCLIENTS=800
node1 LMID=simple
*GROUPS
WSLGRP1
LMID=simple GRPNO=1 OPENINFO=NONE
WSLGRP2
LMID=simple GRPNO=5 OPENINFO=NONE
GROUP1
LMID=simple GRPNO=2 OPENINFO=NONE
GROUP2
LMID=simple GRPNO=3 OPENINFO=NONE
*SERVERS
DEFAULT: RESTART=Y REPLYQ=Y
CLOPT="-A"
WSL SRVGRP=WSLGRP1 SRVID=2000
MAXGEN=255 GRACE=86400
CLOPT="-A -- -n //211.110.82.xxx:5500 -p 5501 -P 5599 -w WSH -t 15 -m 3 -M 10 -x 10"
WSL SRVGRP=WSLGRP2 SRVID=3000
MAXGEN=255 GRACE=86400
CLOPT="-A -- -n //211.110.82.xxx:5600 -p 5601 -P 5699 -w WSH -t 15 -m 3 -M 10 -x 10"
simpserv SRVGRP=GROUP1 SRVID=100
RQADDR="simpserv_q"
RQPERM=0600 MIN=2 MAX=30 SECONDARYRQ=N REPLYQ=Y CONV=N
MAXGEN=255 GRACE=86400
simpserv2 SRVGRP=GROUP2 SRVID=200
RQADDR="simpserv2_q"
RQPERM=0600 MIN=3 MAX=30 SECONDARYRQ=N REPLYQ=Y CONV=N
MAXGEN=255 GRACE=86400
*SERVICES
TOUPPER
2. 서버가 포트를 열어줬으니 이제 client는 그 포트를 타고 서버로 들어가야 합니다. WSL을 타고 들어가겠죠?
앞서 말씀드렸듯이 클라이언트는 WSNADDR 이라는 환경변수를 설정하여 WSL로 진입하여야합니다.
1번 클라이언트 => export WSNADDR=//211.110.82.xxx:5500
2번 클라이언트 => export WSNADDR=//211.110.82.xxx:5600
클라이언트가 이렇게 변수를 설정하게 되면 tpinit() 이라는 함수를 사용하여 서버와의 접속을 요청하게 되고
요청받은 WSL은 서비스를 통신하는 역할을 하는 WSH(WorkStation Handler)와 연결을 하게 됩니다.
이렇게 ( client -> WSL -> WSH) socket이 연결이 된다면 !
client는 tpcall() 함수를 사용하여 서비스를 호출하게 됩니다.
서비스를 호출하게 된다면 WSH는 해당하는 서비스를 가지고 있는 AP server의 정보를 찾기 위하여 Bulletin Board에서 찾습니다.
그리고 해당 APserver로 서비스를 요청하게 되고 그 결과를 WSH로 return 하게 되며 WSH는 해당 클라이언트에게 서비스를 보내게 됩니다.
결과
AIX 2번 장비에서 TOLOWER 서비스 성공적으로 호출
Linux 장비에서 TOUPPER 서비스 성공적으로 호출
'Middleware > Tuxedo' 카테고리의 다른 글
[Tuxedo] printqueue (pq) 명령어 (0) | 2022.09.05 |
---|---|
[Tuxedo] printserver(psr) / printservice(psc) 명령어 (0) | 2022.09.05 |
[미들웨어] 미들웨어란? oracle Tuxedo란? (0) | 2022.09.01 |
[TUXEDO] ULOG 주요 에러 메시지 (0) | 2022.08.30 |
[Tuxedo] 서비스 호출하기 (TOLOWER) (0) | 2022.08.30 |