Informazioni sull'esempio Risultati di calcio
L'esempio Risultati di calcio utilizza il tipo di messaggistica pubblicazione/sottoscrizione per il trasporto dei dati. Per ulteriori informazioni, leggere la sezione relativa alla messaggistica pubblicazione/sottoscrizione nella documentazione di WebSphere Message Brokers.
L'esempio Risultati di calcio dà dimostrazione di un servizio di raccolta di risultati che notifica il punteggio di una partita di calcio mentre la partita è in corso. L'esempio è composto di una o più applicazioni autore (publisher), che simulano e pubblicano i risultati della partita e di una applicazione sottoscrittore (subscriber), che esegue una sottoscrizione ai risultati di tutte le partite che vengono disputate. Quando si segnano goal nelle partite simulate, vengono pubblicate le informazioni sul minuto in cui il goal è stato segnato e sulla squadra che ha segnato.
L'esempio Risultati di calcio include due piccole applicazioni che vanno eseguite dalla riga comandi:
- SoccerResults, il sottoscrittore (subscriber), che esegue la sottoscrizione ai risultati di tutte le partite di calcio che si stanno giocando. Si esegue una sola istanza di SoccerResults alla volta.
- SoccerGame, l'autore (publisher), che simula le partite di calcio e pubblica informazioni sugli eventi quando vengono segnati dei goal. E' possibile eseguire una o più istanze di SoccerGame contemporaneamente.
L'esempio Risultati di calcio dà dimostrazione delle seguenti funzioni delle applicazioni di pubblicazione/sottoscrizione di WebSphere Message Brokers:
- Informazioni sugli eventi, che non vengono conservate una volta che il sottoscrittore, SoccerResults, le ha ricevute
- Le informazioni sullo stato, che vengono conservate dal broker
- Corrispondenza wildcard di stringhe di argomento, ad esempio, Sport/Soccer/Event/#
- Più autori nello stesso argomento, cioè, più di un'istanza dell'applicazione di pubblicazione SoccerGame in esecuzione e che effettua la pubblicazione, contemporaneamente
- La necessità di eseguire la sottoscrizione ad un argomento prima che venga pubblicato, altrimenti il sottoscrittore perde delle pubblicazioni e non può determinare lo stato attuale della partita
- Un sottoscrittore a cui continuano ad essere inviate pubblicazioni quando non è disponibile
- L'uso di pubblicazioni conservate per recuperare lo stato dopo un errore del sottoscrittore. L'applicazione SoccerGame conserva lo stato corrente di tutte le partite disputate; pubblica, nel broker, un messaggio di pubblicazione conservato che contiene il punteggio più aggiornato per ogni partita, ogni volta che il punteggio cambia. Ciò significa che, se si riavvia l'applicazione SoccerResults dopo un errore, questa esegue la sottoscrizione a tutte le pubblicazioni conservate per recuperare lo stato precedente della partita.
L'esempio Risultati di calcio esegue queste azioni:
- Quando si avvia l'applicazione SoccerResults, registra le seguenti sottoscrizioni con il broker:
- Una sottoscrizione all'argomento conservato Sport/Soccer/State/LatestScore/#. L'applicazione SoccerResults indica che vuole ricevere le pubblicazioni in questo argomento solo dietro esplicita richiesta.
- Una sottoscrizione a qualsiasi pubblicazione nell'argomento, Sport/Soccer/Event/#. Poiché le pubblicazioni in questo argomento contengono informazioni sugli eventi, l'applicazione SoccerResults deve essere avviata prima dell'applicazione SoccerGames. Se l'applicazione SoccerResults non è stata avviata per prima, potrebbe perdere pubblicazioni e, quindi, non essere in grado di determinare lo stato corrente, cioè, il punteggio attuale di una partita.
- Quando viene avviata un'istanza dell'applicazione SoccerGame, essa simula un incontro di calcio tra due squadre.
- Quando la partita inizia, finisce oppure viene segnato un goal, l'applicazione SoccerGame pubblica (e visualizza) le informazioni sull'evento nella coda SOCCER_PUBLICATION nei seguenti argomenti:
- Argomento Sport/Soccer/Event/MatchStarted all'inizio di una partita di calcio
- Argomento Sport/Soccer/Event/ScoreUpdate ad ogni goal segnato
- Argomento Sport/Soccer/Event/MatchEnded al termine della partita
- I messaggi che contengono le informazioni sugli eventi vengono trasmessi attraverso il flusso di messaggi SoccerPublish nella coda di sottoscrizione SOCCER_SUBSCRIPTION.
- SoccerResults riceve le pubblicazioni dalla coda SOCCER_SUBSCRIPTION poiché, nel passo 1, SoccerResults ha effettuato la sottoscrizione a qualsiasi pubblicazione nell'argomento Sport/Soccer/Event/#. Nessuna di queste pubblicazioni viene conservata poiché quando si riceve una nuova pubblicazione, le pubblicazioni precedenti non interessano più il sottoscrittore (subscriber).
- Quando SoccerResults riceve ciascuna pubblicazione, pubblica il punteggio, cioè le informazioni sullo stato, nel broker nell'argomento: Sport/Soccer/State/LatestScore/Team1 Team2 dove Team1 e Team2 sono i nomi delle squadre che disputano l'incontro. Queste informazioni sullo stato vengono salvate, come una pubblicazione conservata, dal broker.
- Se il server dei risultati SoccerResults dà un errore durante un incontro, quando viene riavviato emette un comando di richiesta aggiornamento per richiedere le pubblicazioni conservate in Sport/Soccer/State/LatestScore/#, che aveva pubblicato prima dell'errore. Questo significa che il server dei risultati può ricostruire lo stato del gioco, quale era al momento dell'arresto del server. Può quindi elaborare tutte le pubblicazioni dell'evento per l'argomento Sport/Soccer/Event/# nella coda SOCCER_SUBSCRIPTION, che erano state pubblicate da SoccerGame ed elaborate dal flusso di messaggi durante l'arresto del server dei risultati. Anche in caso di errore del server dei risultati SoccerResults, esso dispone ancora di sottoscrizione all'argomento poiché non ha emesso il comando per l'annullamento della registrazione sottoscrittore per richiedere tale annullamento.
Le seguenti sezioni descrivono le risorse dell'esempio in maggiori dettagli:
I messaggi di pubblicazione
L'esempio Risultati di calcio utilizza messaggi XML a definizione automatica che hanno una maschera di messaggio standard contenente:
- Un'intestazione WebSphere MQ, che il flusso di messaggi utilizza per identificare il formato del messaggio e per determinare quale programma di analisi utilizzare per analizzare il messaggio
- Un'intestazione MQRFH2, in cui sono contenuti i comandi di pubblicazione/sottoscrizione
- Una stringa che indica le squadre in campo ed i relativi punteggi
L'applicazione SoccerGame utilizza le informazioni in questa maschera di messaggio per pubblicare un messaggio che contenga informazioni sull'evento nella coda SOCCER_PUBLICATION. Ad esempio, all'inizio di un incontro, l'applicazione SoccerGame pubblica un messaggio che contiene i seguenti dati nell'intestazione MQRFH2:
<psc>
<Command>Publish</Command>
<Topic>Sport/Soccer/Event/MatchStarted</Topic>
</psc>
Quando l'applicazione SoccerResults pubblica il punteggio più aggiornato dell'incontro tra Team1 e Team2, il messaggio che pubblica contiene i seguenti dati nella relativa intestazione MQRFH2:
<psc>
<Command>Publish</Command>
<PubOpt>Retain</PubOpt><Topic>Sport/Soccer/State/LatestScore/Team1 Team2</Topic>
</psc>
Il flusso di messaggi
La seguente figura mostra il flusso di messaggi SoccerPublish, che elabora i messaggi di pubblicazione nell'esempio Risultati di calcio.

La seguente tabella elenca i tipi di nodi utilizzati nel flusso messaggi SoccerPublish.
Tipo nodo |
Nome nodo |
MQInput |
SOCCER_PUBLICATION |
Publication |
Publish Results |
Per ulteriori informazioni, leggere la sezione relativa ai nodi nel flusso di messaggi SoccerPublish e ai flussi di messaggi nella documentazione di WebSphere Message Brokers.
Il flusso di messaggi SoccerPublish è molto semplice poiché contiene solo due nodi. Il nodo MQInput è configurato per identificare la coda di pubblicazioni SOCCER_PUBLICATION come propria coda di input. Quando l'applicazione autore (publisher) SoccerGame pubblica le informazioni sull'evento, come messaggio XML a definizione automatica, nella coda SOCCER_PUBLICATION, il nodo MQInput richiama il messaggio e lo trasmette al nodo Publication denominato Publish Results.
Il nodo Publication pubblica il messaggio nell'applicazione sottoscrittore (subscriber) SoccerResults, che ha eseguito la sottoscrizione all'argomento nel quale sono state pubblicate le informazioni sull'evento.
Le code WebSphere MQ
Il flusso di messaggi di esempio Soccer Results interagisce con due code WebSphere MQ. Le code sono definite nel gestore code WBRK6_DEFAULT_QUEUE_MANAGERr, in cui risiede il broker su cui è in esecuzione il flusso di messaggi.
La seguente tabella mostra le code utilizzate dal flusso di messaggi SoccerPublish e la relativa modalità di interazione.
Flusso di messaggi |
Coda |
Modalità di utilizzo della coda da parte del flusso di messaggi |
SoccerPublish |
SOCCER_PUBLICATION |
Richiama le pubblicazioni evento che sono state pubblicate nella coda da una o più istanze della applicazione autore (publisher) SoccerGame. |
SOCCER_SUBSCRIPTION |
Inserisce le pubblicazioni nella coda perché l'applicazione sottoscrittore SoccerResults le acquisisca e le pubblichi nel broker. |
Torna alla pagina home dell'esempio