Acerca del ejemplo de Resultados de fútbol
El ejemplo Resultados de fútbol utiliza el tipo de mensajería de publicación/suscripción para transportar
datos.
Para más información, lea lo referente a
mensajería
de publicación/suscripción en la documentación de WebSphere Message Brokers.
El ejemplo Resultados de fútbol muestra un servicio de recopilación de resultados que informa del resultado de un
partido de fútbol mientras se juega el partido. El ejemplo consta de una o más aplicaciones de publicador, que simula y publica los resultados del partido, y una aplicación de suscriptor que se suscribe a los resultados de todos los partidos que se juegan. A medida que se marquen goles en los partidos simulados, se publicará la información sobre la hora en la que se marcó el gol y qué equipo lo marcó.
El ejemplo Resultados de fútbol incluye dos aplicaciones pequeñas que se ejecutan desde la línea de mandatos:
- SoccerResults, el suscriptor, que se suscribe a los resultados de todos los partidos de fútbol que se están jugando. Sólo puede ejecutar una instancia de SoccerResults a la vez.
- SoccerGame, el publicador, que simula partidos de fútbol y publica la información del suceso cuando se marcan goles. Puede ejecutar una o más instancias de SoccerGame a la vez.
El ejemplo Resultados de fútbol muestra las siguientes características de las aplicaciones de publicación/suscripción de WebSphere Message Brokers:
- La información de sucesos que no se ha retenido cuando el suscriptor, SoccerResults, la ha recibido
- La información de estado que el intermediario retiene
- Emparejamiento de comodines de series de tema, por ejemplo, Sport/Soccer/Event/#
- Varios publicadores para el mismo tema; es decir, más de una instancia de la aplicación SoccerGame ejecutándose y publicándose a la vez.
- Es necesario suscribirse a un tema antes de publicarlo, de lo contrario el suscriptor no detectará todas las publicaciones y no podrá determinar el estado actual del partido
- Un suscriptor al que se le siguen enviando publicaciones cuando el suscriptor no está disponible
- El uso de publicaciones retenidas para recuperarse después de producirse una anomalía en el suscriptor. La
aplicación SoccerGame mantiene el estado actual de todos los partidos que se están jugando; publica, en el
intermediario, un mensaje de publicación retenido que contiene el último resultado para cada partido cada vez que dicho
resultado cambia. Esto indica que si reinicia la aplicación SoccerResults después de que se produzca una anomalía, se
suscribe a
todas las publicaciones retenidas para restaurar el estado anterior del partido.
El ejemplo Resultados de fútbol realiza las siguientes acciones:
- Cuando se inicia la aplicación SoccerResults, se registran las siguientes suscripciones con el intermediario:
- Una suscripción al tema retenido
Sport/Soccer/State/LatestScore/#. La aplicación SoccerResults indica que sólo desea recibir publicaciones sobre
ese tema cuando las solicite explícitamente.
- Una suscripción a todas las publicaciones sobre el tema, Sport/Soccer/Event/#. Puesto que
las publicaciones sobre este tema contienen información de sucesos, la aplicación SoccerResults
debe iniciarse antes de la aplicación SoccerGames. Si la aplicación SoccerResults no se
inicia primero, podría
no detectar publicaciones y, por lo tanto, no poder determinar el estado actual, es decir, el resultado actual de un
partido.
- Cuando se inicia una instancia de la aplicación SoccerGame, ésta simula un partido de fútbol entre dos
equipos.
- Cuando el partido empieza, finaliza o se marca un gol, la aplicación SoccerGame publica (y muestra)
información de
sucesos en la cola SOCCER_PUBLICATION acerca de los siguientes temas:
- El tema Sport/Soccer/Event/MatchStarted cuando empieza un partido de fútbol
- El tema Sport/Soccer/Event/ScoreUpdate cada vez que se marca un gol
- El tema Sport/Soccer/Event/MatchEnded cuando el partido finaliza
- Los mensajes que contiene la información de sucesos se pasan a través del flujo de mensajes SoccerPublish a la cola de suscripción SOCCER_SUBSCRIPTION.
- SoccerResults recibe las publicaciones de la cola SOCCER_SUBSCRIPTION porque, en el paso 1, SoccerResults se ha suscrito a todas las publicaciones sobre el tema Sport/Soccer/Event/#. Ninguna de estas publicaciones se retienen porque cuando se recibe una nueva publicación, las publicaciones anteriores ya no interesan al suscriptor.
- Cuando SoccerResults recibe cada publicación publica el resultado y la información de estado sobre el tema en
el intermediario: Sport/Soccer/State/LatestScore/Team1 Team2 donde Team1 y Team2 son los
nombres de los equipos del partido.
El intermediario
guarda esta información de estado como publicación retenida.
- Si el servidor de resultados de SoccerResults sufre una anomalía durante un partido, cuando se reinicia
emite un
mandato Request Update para solicitar publicaciones retenidas en el
Sport/Soccer/State/LatestScore/#, que ha publicado antes de que sufriera la anomalía. Esto significa que el servidor de resultados puede reconstruir el estado del juego que había cuando se detuvo el servidor. A continuación puede procesar todas las publicaciones de sucesos para el tema Sport/Soccer/Event/# que están en la cola SOCCER_SUBSCRIPTION, que publicó SoccerGame y procesó el flujo de mensajes mientras el servidor de resultados estaba detenido. Incluso cuando el servidor de resultados de SoccerResults ha sufrido una anomalía, sigue estando suscrito al tema porque no ha emitido el mandato Deregister Subscriber solicitando anular el registro.
Los siguientes apartados describen los recursos del ejemplo más detalladamente:
Los mensajes de publicación
El ejemplo Resultados de fútbol utiliza mensajes XML que se autodefinen que tienen una plantilla de mensaje estándar que contiene:
- Una
cabecera de WebSphere MQ, que el flujo de mensajes utiliza para identificar el formato del mensaje y
para determinar qué analizador utilizar para analizar el mensaje
- Una
cabecera MQRFH2 en la que se incluyen los mandatos de publicación/suscripción
- Una serie de caracteres que especifica los equipos que juegan y sus resultados
La aplicación SoccerGame utiliza la información de esta plantilla de mensajes para publicar un mensaje que
contiene información de sucesos para la cola
SOCCER_PUBLICATION. Por ejemplo, cuando empieza un partido, la aplicación SoccerGame publica un mensaje que contiene
los siguientes datos en la cabecera
MQRFH2:
<psc>
<Command>Publish</Command>
<Topic>Sport/Soccer/Event/MatchStarted</Topic>
</psc>
Cuando la aplicación SoccerResults publica el último resultado del partido entre Team1 y
Team2, el mensaje que publica contiene los siguientes datos en su cabecera MQRFH2:
<psc>
<Command>Publish</Command>
<PubOpt>Retain</PubOpt><Topic>Sport/Soccer/State/LatestScore/Team1 Team2</Topic>
</psc>
El flujo de mensajes
La siguiente figura muestra el flujo de mensajes SoccerPublish, que procesa los mensajes de publicación del
ejemplo Resultados de fútbol.

La siguiente tabla lista los tipos de nodos que se utilizan en el flujo de mensajes SoccerPublish.
Tipo de nodo |
Nombre de nodo |
MQInput |
SOCCER_PUBLICATION |
Publication |
Publish Results |
Si desea ver más información, lea lo referente a
los
nodos en el flujo de mensajes SoccerPublish y los
flujos
de mensajes en la documentación de WebSphere Message Brokers.
El flujo de mensajes SoccerPublish es muy simple porque sólo contiene dos nodos.El nodo MQInput se configura
para identificar la cola de publicaciones de SOCCER_PUBLICATION como su cola de entrada. Cuando la aplicación de publicador SoccerGame publica información de sucesos, como un mensaje XML que se autodefine, a la cola SOCCER_PUBLICATION, el nodo MQInput obtiene el mensaje y lo pasa al nodo Publish Results Publication.
El nodo Publication publica el mensaje en la aplicación de suscriptor SoccerResults, que se ha suscrito al tema en el que se ha publicado la información de sucesos.
Las colas de WebSphere MQ
El flujo de mensajes del ejemplo Resultados de fútbol interactúa con dos colas de WebSphere MQ.
Las colas están definidas en el gestor de colas
WBRK6_DEFAULT_QUEUE_MANAGER que aloja el intermediario en el que se
ejecuta el flujo de mensajes.
La tabla siguiente muestra las colas que utiliza el flujo de mensajes SoccerPublish y cómo interactúan.
Flujo de mensajes |
Cola |
Cómo utiliza la cola el flujo de mensajes |
SoccerPublish |
SOCCER_PUBLICATION |
Obtiene publicaciones de sucesos que una o más instancias de la aplicación de publicador del partido de fútbol ha publicado en la cola. |
SOCCER_SUBSCRIPTION |
Coloca las publicaciones en la cola para que la aplicación de suscriptor de SoccerResults las obtenga y publique en el intermediario. |
Volver a la Página de presentación de ejemplos