Risposte:
JMS (ActiveMQ è un'implementazione del broker JMS) può essere utilizzato come meccanismo per consentire l'elaborazione di richieste asincrone. È possibile che ciò avvenga perché la richiesta richiede molto tempo per il completamento o perché diverse parti potrebbero essere interessate alla richiesta effettiva. Un altro motivo per utilizzarlo è consentire a più client (potenzialmente scritti in lingue diverse) di accedere alle informazioni tramite JMS. ActiveMQ è un buon esempio qui perché è possibile utilizzare il protocollo STOMP per consentire l'accesso da un client C # / Java / Ruby.
Un esempio reale è quello di un'applicazione web utilizzata per effettuare un ordine per un cliente specifico. Come parte dell'ordine (e della sua memorizzazione in un database) potresti voler eseguire una serie di attività aggiuntive:
A tale scopo, il codice dell'applicazione pubblicherà un messaggio su una coda JMS che include un ID ordine. Una parte dell'applicazione che ascolta la coda può rispondere all'evento prendendo l'ID ordine, cercando l'ordine nel database e quindi effettuando l'ordine con un altro sistema di terze parti. Un'altra parte della tua domanda potrebbe essere responsabile del prelievo dell'ordine e dell'invio di un'e-mail di conferma al cliente.
Usali continuamente per elaborare le operazioni di lunga durata in modo asincrono. Un utente Web non vorrà attendere più di 5 secondi per l'elaborazione di una richiesta. Se ne hai uno che funziona più a lungo di quello, un progetto è quello di inviare la richiesta a una coda e rispedire immediatamente un URL che l'utente può controllare per vedere quando il lavoro è finito.
La pubblicazione / iscrizione è un'altra buona tecnica per disaccoppiare i mittenti da molti destinatari. È un'architettura flessibile, perché gli abbonati possono andare e venire secondo necessità.
Ho avuto così tanti usi sorprendenti per JMS:
Comunicazione tramite web chat per il servizio clienti.
Registrazione di debug sul back-end. Tutti i server delle app hanno trasmesso messaggi di debug a vari livelli. È quindi possibile avviare un client JMS per controllare i messaggi di debug. Certo avrei potuto usare qualcosa come syslog , ma questo mi ha dato tutti i modi per filtrare l'output in base alle informazioni contestuali (eq per nome del server delle app, chiamata API, livello di registro, ID utente, tipo di messaggio, ecc ...). Ho anche colorato l'output.
Debug registrazione su file. Come sopra, solo i pezzi specifici sono stati estratti utilizzando i filtri e registrati su file per la registrazione generale.
Alerting. Ancora una volta, una configurazione simile alla registrazione sopra, alla ricerca di errori specifici e allerta le persone con vari mezzi (e-mail, messaggi di testo, messaggistica istantanea, pop-up Growl ...)
Configurazione e controllo dinamici di cluster software. Ogni server di app trasmetterà un messaggio "configurami", quindi un demone di configurazione che risponderà con un messaggio contenente tutti i tipi di informazioni di configurazione. Successivamente, se tutti i server delle app necessitavano di una modifica delle configurazioni in una sola volta, è possibile farlo dal demone config.
E le solite transazioni in coda per attività ritardate come fatturazione, elaborazione degli ordini, provisioning, generazione di e-mail ...
È fantastico ovunque tu voglia garantire la consegna dei messaggi in modo asincrono.
Calcolo distribuito (a) sincrono.
Un esempio reale potrebbe essere un framework di notifica a livello di applicazione, che invia e-mail agli stakeholder in vari punti nel corso dell'utilizzo dell'applicazione. Quindi l'applicazione dovrebbe agire come Producer
creando un Message
oggetto, posizionandolo su un particolare Queue
e andando avanti.
Ci sarebbe un gruppo di utenti Consumer
che si iscriverebbero alla Queue
domanda in questione e si occuperebbero di gestire l' Message
invio. Si noti che nel corso di questa transazione, gli Producer
s sono disaccoppiati dalla logica di come un dato Message
verrebbe gestito.
I framework di messaggistica (ActiveMQ e simili) fungono da spina dorsale per facilitare tali Message
transazioni fornendo MessageBroker
s.
L'ho usato per inviare scambi infragiornalieri tra diversi sistemi di gestione dei fondi. Se vuoi saperne di più su ciò che è un ottimo servizio di messaggistica tecnologica, posso consigliare a fondo il libro " Enterprise Integration Patterns ". Ci sono alcuni esempi di JMS per cose come richiesta / risposta e pubblicazione / iscrizione.
La messaggistica è uno strumento eccellente per l'integrazione.
Lo usiamo per avviare l'elaborazione asincrona che non vogliamo interrompere o in conflitto con una transazione esistente.
Ad esempio, supponiamo che tu abbia una logica costosa e molto importante come "acquista roba", una parte importante della roba di acquisto sarebbe "notifica roba negozio". Rendiamo la chiamata di notifica asincrona in modo tale che qualsiasi logica / elaborazione coinvolta nella chiamata di notifica non blocchi o contenda le risorse con la logica aziendale di acquisto. Risultato finale, acquisto completato, l'utente è felice, riceviamo i nostri soldi e poiché la coda è garantita la consegna il negozio viene avvisato non appena viene aperto o non appena c'è un nuovo articolo nella coda.
L'ho usato per il mio progetto accademico che era un sito di vendita al dettaglio online simile ad Amazon. JMS è stato utilizzato per gestire le seguenti funzionalità:
Avevamo anche diversi client remoti implementati collegati al server principale. Se la connessione è disponibile, usano per accedere al database principale o se non usano il proprio database. Per gestire la coerenza dei dati, abbiamo implementato il meccanismo 2PC. Per questo, abbiamo usato JMS per scambiare i messaggi tra questi sistemi, cioè uno che agisce come coordinatore che avvierà il processo inviando un messaggio sulla coda e altri risponderanno di conseguenza rispedendo nuovamente un messaggio sulla coda. Come altri hanno già detto, questo era simile al modello pub / sub.
Ho visto JMS utilizzato in diversi progetti commerciali e accademici. JMS può facilmente entrare nella tua immagine, ogni volta che vuoi avere un sistema distribuito totalmente disaccoppiato. In generale, quando è necessario inviare la richiesta da un nodo e qualcuno nella propria rete si prende cura di essa senza / fornendo al mittente tutte le informazioni sul destinatario.
Nel mio caso, ho usato JMS nello sviluppo di un middleware orientato ai messaggi (MOM) nella mia tesi, in cui tipi specifici di oggetti orientati agli oggetti vengono generati da un lato come richiesta e compilati ed eseguiti dall'altro lato come risposta .
Apache Camel utilizzato in combinazione con ActiveMQ è un ottimo modo per eseguire modelli di integrazione aziendale
Stiamo utilizzando JMS per la comunicazione con i sistemi in un numero enorme di siti remoti su reti inaffidabili. L'accoppiamento lento in combinazione con una messaggistica affidabile produce un panorama di sistema stabile: ogni messaggio verrà inviato non appena tecnicamente possibile, problemi più grandi nella rete non influenzeranno l'intero panorama del sistema ...