Sobre a Amostra Soccer Results
A amostra SoccerResults utiliza o tipo de sistema de mensagens de publicação/assinatura para transportar dados. Para obter informações adicionais, leia sobre Sistema de Mensagens de Publicação/Assinatura na documentação do WebSphere Message Brokers.
A amostra Soccer Results demonstra um serviço de reunião de resultados que relata os placares de partidas de futebol enquanto o jogo está em andamento. A amostra consiste em um ou mais aplicativos publicadores, que simulam e publicam os resultados de partidas e um aplicativo assinante, que assina os resultados de todas as partidas que estão
sendo jogadas. À medida que os gols são marcados nas partidas simuladas, as informações
sobre a hora em que o gol foi marcado e qual time marcou são publicadas.
A amostra Soccer Results inclui dois pequenos aplicativos que são executados a partir da linha de comandos.
- SoccerResults, o assinante, que assina os resultados de todas as partidas de
futebol que estão sendo jogadas. Somente uma instância de SoccerResults é executada por vez.
- SoccerGame, o publicador, que simula as partidas de futebol e publica as informações sobre eventos à medida que os gols são marcados. Você pode executar uma ou mais instâncias do
SoccerGame por vez.
A amostra Soccer Results demonstra os seguintes recursos dos aplicativos de publicação/assinatura do WebSphere Message Brokers:
- Informações sobre eventos, que não são retidas quando o assinante, SoccerResults,
as recebeu.
- Informações sobre estado, que são retidas pelo intermediário.
- Correspondência curinga de cadeias do tópico, por exemplo, Sport/Soccer/Event/#.
- Vários publicadores para o mesmo tópico, ou seja, mais de uma instância do aplicativo de publicação SoccerGame em execução e publicando ao mesmo tempo.
- A necessidade de assinar um tópico antes de ele ser publicado, caso contrário, o assinante perde publicações e não pode determinar o estado atual do jogo.
- As publicações continuam a ser enviadas ao assinante mesmo quando ele não está disponível.
- A utilização das publicações retidas para recuperar o estado depois de uma falha do assinante. O aplicativo SoccerGame mantém o estado atual de todos os jogos que estão sendo realizados; ele publica, no intermediário, uma mensagem de publicação retida contendo o placar de gols mais recente de cada jogo sempre que o placar é alterado. Isso significa que se você reiniciar o aplicativo SoccerResults após uma falha, ele assinará todas as publicações retidas para restaurar o estado anterior dos jogos.
A amostra SoccerResults executa as seguintes ações:
- Quando o aplicativo SoccerResults é iniciado, ele registra as seguintes assinaturas com o intermediário:
- Uma assinatura para o tópico retido Sport/Soccer/State/LatestScore/#. O aplicativo SoccerResults indica que deseja receber somente publicações sobre esse tópico quando forem explicitamente solicitadas.
- Uma assinatura de todas as publicações do tópico, Sport/Soccer/Event/#. Como as publicações desse tópico contêm informações sobre eventos, o aplicativo SoccerResults deve ser iniciado antes do aplicativo SoccerGames.
Se o aplicativo SoccerResults não for iniciado primeiro, ele poderá perder publicações e, assim, não poderá determinar o estado atual, ou seja, o placar atual de uma partida.
- Quando uma instância do aplicativo SoccerGame é iniciada, ela simula uma partida de futebol entre dois times.
- Quando a partida é iniciada, finalizada ou um gol é marcado, o aplicativo SoccerGame publica (e exibe) informações de evento para a fila SOCCER_PUBLICATION nos seguintes tópicos:
- Sport/Soccer/Event/MatchStarted, quando uma partida de futebol é iniciada
- Sport/Soccer/Event/ScoreUpdate, toda vez que um gol é
marcado
- Sport/Soccer/Event/MatchEnded, quando a partida termina
- As mensagens que contêm as informações sobre eventos são transmitidas através do fluxo de mensagens SoccerPublish para a fila de assinatura SOCCER_SUBSCRIPTION.
- SoccerResults recebe as publicações da fila SOCCER_SUBSCRIPTION, porque na etapa 1
o SoccerResults assinou todas as publicações do tópico
Sport/Soccer/Event/#. Nenhuma dessas publicações é retida, porque quando uma nova publicação é recebida, as publicações anteriores não são mais de interesse
para o assinante.
- Quando SoccerResults recebe cada publicação, ele publica o placar, as informações de estado, para o intermediário no tópico: Sport/Soccer/State/LatestScore/Team1 Team2 , em que Team1 e Team2 são os nomes dos times que estão jogando. Essas informações sobre estado
são salvas, como uma publicação retida, pelo intermediário.
- Se o servidor de resultados do SoccerResults falhar durante uma partida, quando for reiniciado, ele emitirá um comando Request Update para solicitar as publicações retidas em Sport/Soccer/State/LatestScore/# publicado antes da falha. Isso significa que o servidor de resultados pode reconstruir o estado
do jogo para o anterior à parada do servidor. Poderá, então, processar todas as publicações de eventos para o tópico Sport/Soccer/Event/# na fila SOCCER_SUBSCRIPTION, que foram publicados pelo SoccerGame e processados pelo fluxo de mensagens enquanto o servidor de resultados estava parado. Apesar do servidor de resultados SoccerResults ter falhado, ele continua assinado ao tópico, porque não emitiu o comando
Deregister Subscriber para solicitar que fosse removido seu registro.
As seguintes seções descrevem os recursos da amostra em mais detalhes:
As Mensagens de Publicação
A amostra Soccer Results utiliza mensagens XML autodefinidas que têm um gabarito de mensagem padrão contendo:
- Um cabeçalho do WebSphere MQ que o fluxo de mensagens utiliza para identificar o formato da mensagem e para determinar qual analisador utilizar para analisar a mensagem
- Um cabeçalho MQRFH2 no qual comandos publish/subscribe estão contidos
- Uma cadeia que especifica os times da partida e o placar
O aplicativo SoccerGame utiliza as informações desse gabarito de mensagem para publicar uma mensagem que contém informações de evento na fila SOCCER_PUBLICATION. Por exemplo, quando uma
partida é iniciada, o aplicativo SoccerGame publica uma mensagem que contém os seguintes dados no cabeçalho MQRFH2:
<psc>
<Command>Publish</Command>
<Topic>Sport/Soccer/Event/MatchStarted</Topic>
</psc>
Quando o aplicativo SoccerResults publica o placar mais atual da partida entre
Team1 e Team2, a mensagem publicada contém os seguintes dados em seu cabeçalho MQRFH2:
<psc>
<Command>Publish</Command>
<PubOpt>Retain</PubOpt><Topic>Sport/Soccer/State/LatestScore/Team1 Team2</Topic>
</psc>
O Fluxo de Mensagens
A figura a seguir mostra o fluxo de mensagens SoccerPublish, que processa as mensagens de publicação na amostra Soccer Results.

A tabela a seguir lista os tipos de nós que são utilizados no fluxo de mensagens SoccerPublish.
Tipo de Nó |
Nome do Nó |
MQInput |
SOCCER_PUBLICATION |
Publicação |
Publish Results |
Para obter informações adicionais, leia sobre os nós no fluxo de mensagens SoccerPublish e fluxos de mensagens na documentação do WebSphere Message Brokers.
O fluxo de mensagens SoccerPublish é muito simples porque contém somente dois nós. O nó MQInput é configurado para identificar a fila de publicação SOCCER_PUBLICATION como sua fila de entrada. Quando o aplicativo publicador SoccerGame publica informações sobre eventos, como uma mensagem XML autodefinida, na fila SOCCER_PUBLICATION, o nó
MQInput obtém a mensagem e a transmite para o nó Publication a Publish Results.
O nó Publication publica a mensagem para o aplicativo assinante SoccerResults, que assinou o
tópico no qual as informações sobre eventos são publicadas.
As Filas do WebSphere MQ
O fluxo de mensagens da amostra Soccer Results interage com duas filas do WebSphere MQ. As filas são definidas no gerenciador de filas WBRK6_DEFAULT_QUEUE_MANAGER, que hospeda o intermediário no qual o fluxo de mensagens é executado.
A tabela a seguir mostra as filas que são utilizadas pelo fluxo de mensagens SoccerPublish e como elas
interagem.
Fluxo de Mensagens |
Fila |
Como o Fluxo de Mensagens Utiliza a Fila |
SoccerPublish |
SOCCER_PUBLICATION |
Obtém publicações sobre eventos que foram publicados na fila por uma ou mais instâncias do aplicativo publicador SoccerGame. |
SOCCER_SUBSCRIPTION |
Coloca publicações na fila para o aplicativo assinante SoccerResults receber e publicar no intermediário. |
Voltar para Home da Amostra