Soccer Results 샘플 정보
SoccerResults 샘플은 publish/subscribe 유형의 메시징을 사용하여 데이터를 전송합니다. 자세한 정보는
WebSphere Message Broker 문서에 있는 publish/subscribe 메시징을 읽으십시오.
Soccer Results 샘플에서는 경기가 진행되는 동안 축구 경기의 점수를 보고하는 결과 집계 서비스를 보여줍니다.
샘플은 하나 이상의 publisher 응용프로그램(경기 결과를 시뮬레이트하여 publish함)과
하나의 subscriber 응용프로그램(진행 중인 모든 경기의 결과를 subscribe함)으로 구성됩니다.
시뮬레이션 경기에서 골이 기록되는 대로 골을 넣은 시간 및 골을 넣은 팀에 대한 정보가 publish됩니다.
Soccer Results 샘플은 명령행에서 실행되는 두 개의 작은 응용프로그램을 포함합니다.
- SoccerResults. subscriber로서 진행 중인 모든 축구 경기의 결과를 subscribe합니다.
한번에 하나의 SoccerResults 인스턴스만 실행할 수 있습니다.
- SoccerGame. publisher로서 축구 경기를 시뮬레이트하여 골을 넣는 대로 이벤트 정보를 publish합니다.
동시에 SoccerGame의 인스턴스를 하나 이상 실행할 수 있습니다.
Soccer Results 샘플에서는 다음과 같은 WebSphere Message Brokers publish/subscribe 응용프로그램 기능을 보여줍니다.
- subscriber인 SoccerResults가 수신했을 때 보유하지 않았던 이벤트 정보.
- 브로커가 보유한 상태 정보.
- 토픽 문자열의 와일드카드 일치(예: Sport/Soccer/Event/#).
- 동일한 토픽에 대한 다중 publisher. 즉, 동시에 둘 이상의 SoccerGame publication 응용프로그램 인스턴스가 실행 및 publish 중입니다.
- publish하기 전에 토픽을 subscribe해야 합니다. 그렇지 않으면 subscriber는 publication을 유실하여 경기의 현재 상태를 판별할 수 없습니다.
- subscriber가 사용 불가능해도 subscriber는 계속해서 publication을 송신합니다.
- subscriber가 실패한 후 상태를 복구하기 위해 보유 publication을 사용합니다. SoccerGame 응용프로그램은 재생되는 모든 경기의 현재 상태를 유지보수하고 스코어가 변경될 때마다 각 경기의 최근 목표 스코어를 포함하는 보유 publication 메시지를 브로커에 publish합니다. 이는 장애가 있어 SoccerResults 응용프로그램을 재시작하는 경우 이전의 경기 상태를 복원하기 위해 모든 보유 publication을
subscribe하는 것을 의미합니다.
SoccerResults 샘플은 다음 조치를 수행합니다.
- SoccerResults 응용프로그램이 시작되면 다음 subscription을 브로커에 등록합니다.
- 보유된 Sport/Soccer/State/LatestScore/# 토픽에 대한 subscription. 명확하게 이 토픽을 요청할 경우에만 이 토픽에 대한
publication을 수신하고자 한다는 점을 명시합니다.
- Sport/Soccer/Event/# 토픽에 대한 모든 publication에 대한 subscription. 이 토픽에 대한 publication은
이벤트 정보를 포함하므로, SoccerGames 응용프로그램보다 먼저 SoccerResults 응용프로그램을 시작해야 합니다. SoccerResults 응용프로그램을
먼저 시작하지 않으면, publication이 누락될 수 있으므로 현재 상태, 즉 경기 중의 현재 득점을 판별할 수 없습니다.
- SoccerGame 응용프로그램의 인스턴스가 시작되면 두 팀 간의 축구 경기를 시뮬레이트합니다.
- 경기가 시작되고 끝나거나 골 득점이 발생하면, SoccerGame 응용프로그램은 다음 토픽에 대한 이벤트 정보를
SOCCER_PUBLICATION 큐에 publish하고 표시합니다.
- 축구 경기가 시작될 경우 Sport/Soccer/Event/MatchStarted 토픽
- 골을 득점할 때마다 Sport/Soccer/Event/ScoreUpdate 토픽
- 경기가 끝날 경우 Sport/Soccer/Event/MatchEnded 토픽
- 이벤트 정보를 포함하는 메시지는 SoccerPublish 메시지 플로우를 통해 SOCCER_SUBSCRIPTION subscription 큐로 전달됩니다.
- 1 단계에서 SoccerResults가 Sport/Soccer/Event/# 토픽에 대한 모든 publication을 subscribe했기 때문에
SoccerResults는 SOCCER_SUBSCRIPTION 큐에서 publication을 수신합니다.
새 publication을 수신하면 이전 publication은 더 이상 subscriber와 관련이 없으므로
보유되지 않습니다.
- SoccerResults가 각 publication을 수신하면, 점수 및 상태 정보를 Sport/Soccer/State/LatestScore/Team1 Team2
토픽으로 브로커에게 publish합니다. 여기서 Team1 및 Team2는 경기 중인 팀의 이름입니다. 이 상태
정보는 브로커에 의해 보유 publication으로 저장됩니다.
- 경기 중에 SoccerResults 결과 서버가 실패할 경우, 재시작하면 결과 서버는 실패하기 전에 publish된
Sport/Soccer/State/LatestScore/#에 대한 보유 publication을 요청하기 위해 Request Update 명령을
발행합니다. 이는 결과 서버가 서버가 중지되었던 때의 경기 상태를 재구성할 수 있음을 의미합니다. 그런 다음, 결과 서버가 정지되어 있던 동안 SoccerGame에 의해 publish되어
메시지 플로우에 의해 처리되었던 SOCCER_SUBSCRIPTION 큐에 있는 Sport/Soccer/Event/# 토픽에
대한 모든 이벤트 publication을 처리할 수 있습니다. SoccerResults 결과 서버가 실패하더라도
등록을 취소하는 Deregister Subscriber 명령을 발행하지 않았으므로
계속해서 토픽을 subscribe하고 있습니다.
다음 절에서는 샘플 자원에 대해 자세히 설명합니다.
publication 메시지
Soccer Results 샘플에서는 다음을 포함하는 표준 메시지 템플리트가 있는 자체 정의 XML 메시지를 사용합니다.
- WebSphere MQ 헤더. 메시지 플로우가 메시지 형식을 식별하고 메시지를 구문 분석할 때 사용할 구문 분석기를 판별하는 데 사용합니다.
- MQRFH2 헤더. publish/subscribe 명령이 포함되어 있습니다.
- 경기하는 팀 및 점수를 지정하는 문자열
SoccerGame 응용프로그램은 이 메시지 템플리트 내의 정보를 사용하여 이벤트 정보를 포함하는 메시지를
SOCCER_PUBLICATION 큐에 publish합니다. 예를 들어, 경기가 시작되면 SoccerGame 응용프로그램은 MQRFH2 헤더에
다음과 같은 데이터를 포함하는 메시지를 publish합니다.
<psc>
<Command>Publish</Command>
<Topic>Sport/Soccer/Event/MatchStarted</Topic>
</psc>
SoccerResults 응용프로그램이 Team1과 Team2 간 경기의 최종 점수를 publish하면, publish되는 메시지의 MQRFH2 헤더에는
다음과 같은 데이터가 포함되어 있습니다.
<psc>
<Command>Publish</Command>
<PubOpt>Retain</PubOpt><Topic>Sport/Soccer/State/LatestScore/Team1 Team2</Topic>
</psc>
메시지 플로우
다음 그림은 Soccer Results 샘플에서 publication 메시지를 처리하는 SoccerPublish 메시지 플로우를 보여줍니다.

다음 표에서는 SoccerPublish 메시지 플로우에서 사용하는 노드 유형을 나열합니다.
노드 유형 |
노드 이름 |
MQInput |
SOCCER_PUBLICATION |
Publication |
Publish Results |
자세한 정보는 WebSphere Message Broker 문서에 있는 SoccerPublish 메시지 플로우의 노드 및 메시지 플로우를 읽으십시오.
SoccerPublish 메시지 플로우에는 두 개의 노드만 들어 있으므로 매우 간단합니다. MQInput 노드는 SOCCER_PUBLICATION publication 큐를 입력 큐로 식별하도록 구성됩니다.
SoccerGame publisher 응용프로그램이 이벤트 정보를 자체 정의 XML 메시지로서
SOCCER_PUBLICATION 큐에 publish하면, MQInput 노드는 메시지를 가져와 Publish Results Publication 노드로 전달합니다.
Publication 노드는 이벤트 정보가 publish된 토픽을 subscribe했던 SoccerResults subscriber 응용프로그램에 메시지를 publish합니다.
WebSphere MQ 큐
Soccer Results 샘플 메시지 플로우는 두 개의 WebSphere MQ 큐와 상호작용합니다. 큐는 메시지 플로우를 실행할 브로커를 호스트하는
WBRK6_DEFAULT_QUEUE_MANAGER 큐 관리자에 정의되어 있습니다.
다음 표는 SoccerPublish 메시지 플로우에서 사용되는 큐 및 이러한 큐가
상호작용하는 방법을 보여줍니다.
메시지 플로우 |
큐 |
메시지 플로우가 큐를 사용하는 방법 |
SoccerPublish |
SOCCER_PUBLICATION |
하나 이상의 SoccerGame publisher 응용프로그램 인스턴스가 큐에 publish한 이벤트 publication을 가져옵니다. |
SOCCER_SUBSCRIPTION |
SoccerResults subscriber 응용프로그램이 가져와 브로커에 publish할 수 있도록 큐에 publication을 넣습니다. |
샘플 홈으로 돌아가기