BWCE Application 실행 on Docker

[toc]

1. 환경 이해

1.1 BusinessWorks Studio 환경 이해

TIBCO BusinessWorks는 One Source 개발 -> Multi Target 환경 배포를 지원합니다. 따라서 Application을 개발하는 BusinessWorks Studio는 TIBCO ActiveMatrix BusinessWorks™ 6.7.0 과 TIBCO BusinessWorks™ Container Edition 2.6.1 모두 지원합니다.

단, TIBCO ActiveMatrix BusinessWorks™ 6.7.0의 Studio에서 기존 Application을 Container 환경으로 개발시 Deployment Target을 Container로 변경해 주어야 합니다.

1.2 BusinessWorks 샘플 Application 이해 및 소스 다운로드

bwce_secnario

REST 서비스를 하는 두개의 마이크로서비스 (Consumer, Provider)를 샘플로 구현합니다. Consumer : 외부의 요청을 받아서 Provider를 호출하고 그 결과값을 외부 요청자에게 전달해 주는 서비스 Provider : 자체적인 서비스를 제공하는 벡엔드 서비스

샘플 Application 다운로드 : 샘플 Git 주소

샘플 Application을 Zip 파일로 다운로드 합니다.

sample down

2. BusinessWorks Studio에서 실행

2.1 샘플 Application Import

Project Explore 에서 Import

Git에서 다운 받은 bwce_provider_consumer-main.zip 파일을 Import 합니다.

bwce_provider_consumer-main.zip 파일에 Consumer 와 Provider 두개의 Application이 존재합니다.

2.2 샘플 Application 둘러보기

  1. Consumer REST 서비스 보기 consumerREST

  2. Consumer HTTP Client Resouce 보기 ConsumerHTTPClient

    Consumer가 호출하는 Provider의 HOST와 Port정보가 Module Property(PROVIDER_HOST, PROVIDER_PORT) 로 정의 되어 있습니다.

  3. Provider HTTP Connector Resouce 보기 ConsumerHTTPClient

    Provider의 Port정보가 Module Property - PROVIDER_PORT로 정의 되어 있습니다.

  4. Consumer Module Property 정보 consumerProperty

    Property 정보는 Applicatoin구동시 파라미터 정보로 변경 가능합니다.

2.3 샘플 Application Run

  1. Run -> Run Configurations -> BusinessWorks Application -> Run consumerProperty

    Consumer 와 Provider 두개의 Application을 체크 합니다.

  2. OSGI 명령어로 REST URLs (Swagger UI) 얻기 Console 창에서 lrestdoc 을 입력합니다. consumerProperty

    Consumer 와 Provider Application의 REST Discovery Url (Swagger UI) 을 얻습니다.

  3. Swagger UI를 통한 REST 서비스 테스트
    • Provider Application의 Swagger UI를 통한 REST 서비스 테스트

      브라우저에서 Provider Application의 REST Discovery Url (Swagger UI) 입력

      Provider -> Try it out -> RequestID 입력 -> Execute 클릭 -> Server Response 결과 값 확인

    • Consumer Application의 Swagger UI를 통한 REST 서비스 테스트

      브라우저에서 Consumer Application의 REST Discovery Url (Swagger UI) 입력

      Consumer -> Try it out -> RequestID 입력 -> Execute 클릭 -> Server Response 결과 값 확인

2.4 샘플 Application EAR 생성

Consumer와 Provider Application의 EAR 파일을 생성합니다.

  1. Project Explore -> Consumer.application -> Create Enterprise Archive(EAR)

  2. Project Explore -> Provider.application -> Create Enterprise Archive(EAR)

각 Provider.application_1.0.0.ear와 Consumer.application_1.0.0.ear 파일이 생성됩니다.

3 샘플 Application Docker Build

3.1 Provider Application Docker Build

3.1.1 Dockerfile 생성

$ cat <<EOF | tee Dockerfile_Provider
#BWCE Base Docker 이미지 태그 네임
FROM tibco/bwce:latest                    

#Base Docker에 Copy할 EAR 파일 이름
ADD Provider.application_1.0.0.ear /      
 
#외부 오픈 포트 이름 
EXPOSE 8000

#환경변수 BWCE Module Property에 값 전달
ENV BW_PROFILE Docker
ENV PROVIDER_PORT 8000                    
EOF

ENV 환경 변수는 docker run -e 옵션을 통해서도 전달 가능하며, BWCE에서 기본으로 사용되는 환경 변수는 https://docs.tibco.com/pub/bwce/2.6.1/doc/html/GUID-25BD2BA4-6BA4-418C-98D4-6EB3C9196399.html 를 참조하시기 바랍니다.

3.1.2 Docker Build

$ docker build -t provider:latest -t provider:1.0 -f Dockerfile_Provider .

3.1.3 Docker image 결과 확인

$ docker images

3.2 Consumer Application Docker Build

3.2.1 Dockerfile 생성

$ cat <<EOF | tee Dockerfile_Consumer
#BWCE Base Docker 이미지 태그 네임
FROM tibco/bwce:latest        

#Base Docker에 Copy할 EAR 파일 이름
ADD Consumer.application_1.0.0.ear /      

#외부 오픈 포트 이름  
EXPOSE 7000   

#환경변수 BWCE Module Property에 값 전달
ENV BW_PROFILE Docker
ENV PROVIDER_PORT 8000               
#PROVIDER_HOST (Docker Host IP 혹은 Docker Link의 이름 )
ENV PROVIDER_HOST provider-host           
ENV CONSUMER_PORT 7000                    
EOF

ENV 환경 변수는 docker run -e 옵션을 통해서도 전달 가능하며, BWCE에서 기본으로 사용되는 환경 변수는 https://docs.tibco.com/pub/bwce/2.6.1/doc/html/GUID-25BD2BA4-6BA4-418C-98D4-6EB3C9196399.html 를 참조하시기 바랍니다.

3.2.2 Docker Build

$ docker build -t consumer:latest -t consumer:1.0 -f Dockerfile_Consumer .

3.2.3 Docker image 결과 확인

$ docker images

4 샘플 Application Docker Run

4.1 Provider Application Docker Run

4.1.1 docker run 을 통한 container 실행

$ sudo docker run -d -p 8000:8000 --name provider_1.0 provider:latest

-p 8000:8000 Docker Host의 8000 port를 Container의 8000(REST HTTP Connector) port로 바인딩 합니다.

-name provider_1.0 실행되는 conatiner의 이름을 지정합니다.

4.1.2 docker ps를 통한 container 실행 확인

$ sudo docker ps
CONTAINER ID  IMAGE            COMMAND              CREATED         STATUS         PORTS                    NAMES
fe9a3f15a8db  provider:latest  "/scripts/start.sh"  45 seconds ago  Up 44 seconds  0.0.0.0:8000->8000/tcp   provider_1.0

4.1.3 crul 로 테스트

$ curl -X GET "http://localhost:8000/provider?RequestID=testID" -H "accept: application/json"
{"Provider_Version":"V1.0","Message":"This is from Provider V1.0 for RequestID : testID"}

4.1.4 swagger UI로 테스트

브라우저에서 http://localhost:8000/swagger 로 접근

4.2 Consumer Application Docker Run

4.2.1 docker run 을 통한 container 실행

$ sudo docker run -d -p 7000:7000 --link=provider_1.0:provider-host --name consumer_1.0 consumer:latest

-p 7000:7000 Docker Host의 7000 port를 Container의 7000(REST HTTP Connector) port로 바인딩 합니다.

-name consumer_1.0 실행되는 conatiner의 이름을 지정합니다.

--link=provider_1.0:provider-host를 사용하여 앞서 실행한 provier_1.0의 container를 provider-host 정보에 링크 시킵니다. 해당 옵션 대신 -e PROVIDER_HOST=[Docker Host IP]를 이용하여 PROVIDER_HOST Property 값을 바로 전달 가능합니다.

4.2.2 docker ps를 통한 container 실행 확인

$ sudo docker ps
CONTAINER ID  IMAGE            COMMAND              CREATED          STATUS         PORTS                    NAMES
990324039c1c  consumer:latest  "/scripts/start.sh"  9 seconds ago    Up 8 seconds   0.0.0.0:7000->7000/tcp   consumer_1.0
841e7ed9a9e8  provider:latest  "/scripts/start.sh"  4 minutes ago    Up 4 minutes   0.0.0.0:8000->8000/tcp   provider_1.0

4.2.3 crul 로 테스트

$ curl -X GET "http://localhost:7000/consumer?RequestID=testID" -H "accept: application/json"
{"Consumer_Version":"V1.0","Provider_Version":"V1.0","Message":"This is from Provider V1.0 for RequestID : testID"}

4.2.4 swagger UI로 테스트

브라우저에서 http://localhost:7000/swagger 로 접근

5. 샘플 Application Docker Monitoring

5.1 Monitoring DB 저장소 생성

docker run으로 Docker hub에서 PostgreSQL 이미지 다운 및 실행

$ sudo docker run -d \
    --name postgres_bwce_mon \
    -e POSTGRES_USER=bwuser \
    -e POSTGRES_PASSWORD=bwuser \
    postgres

5.2 BWCE Applicatoin Monitoring Container 실행

docker run으로 BWCE Applicatoin Monitoring Container 실행

$ sudo docker run -d -p 8080:8080 \
        --link=postgres_bwce_mon:postgres-host \
        --name bwce_mon \
        -e PERSISTENCE_TYPE="postgres" \
        -e DB_URL="postgresql://bwuser:bwuser@postgres-host:5432/postgres" \
        tibco/bwce-mon:latest

5.3 Applicatoin Container 와 Monitoring Container 연계

  1. 기존 Application Conatiner 삭제
    $ sudo docker stop consumer_1.0 provider_1.0
    $ sudo docker rm consumer_1.0 provider_1.0
    
  2. Monitoring Container와 연계 및 Application Container 실행
    $ sudo docker run -d -p 8000:8000 --name provider_1.0 \
                    --link bwce_mon:bwce_mon \
                    -e BW_APP_MONITORING_CONFIG='{"url":"http://bwce_mon:8080"}' \
                    provider:latest
    $ sudo docker run -d -p 7000:7000 --link=provider_1.0:provider-host --name consumer_1.0 \
                    --link bwce_mon:bwce_mon \
                    -e BW_APP_MONITORING_CONFIG='{"url":"http://bwce_mon:8080"}' \
                     consumer:latest
    

    BW_APP_MONITORING_CONFIG 환경변수에 Monitoring Container 의 접속 정보를 입력하여 연계합니다.

5.4 브라우저를 통한 Monitoring 검증

  1. 브라우저를 통한 Monitoring Container의 URL 접속 monitoring_main

  2. Consumer Application Process 통계 정보 보기 monitoring_stats

  3. Consumer Application Process Instance 히스토리 보기 monitoring_stats

    Process 호출 이력 및 호출 당시의 각 엑티비티의 성공 여부와 Input/Output에 대한 값을 확인 할 수 있습니다.