Domanda

Stavo solo leggendo un po 'su JMS e Apache ActiveMQ. E mi chiedevo a quale uso del mondo reale le persone qui hanno usato JMS o tecnologie simili per la coda dei messaggi?

È stato utile?

Soluzione

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 che viene utilizzata per effettuare un ordine per un particolare cliente. Come parte dell'ordine (e della sua memorizzazione in un database) potresti voler eseguire una serie di attività aggiuntive:

  • Memorizza l'ordine in una sorta di sistema di back-end di terze parti (come SAP)
  • Invia un'email al cliente per informarli che il suo ordine è stato effettuato

Per fare ciò, 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.

Altri suggerimenti

Utilizzali sempre per elaborare in modo asincrono operazioni di lunga durata. 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.

Pubblica / sottoscrivi è un'altra buona tecnica per disaccoppiare mittenti da molti destinatari. È un'architettura flessibile, perché gli abbonati possono andare e venire quando necessario.

Ho avuto così tanti usi straordinari per JMS:

  • Comunicazione chat Web per il servizio clienti.

  • Registrazione 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. Sicuramente avrei potuto usare qualcosa come syslog , ma questo mi ha dato molti 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 logging to 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, sms, messaggistica istantanea, pop-up Growl ...)

  • Configurazione e controllo dinamici di cluster software. Ogni server di app trasmetterà un messaggio "configurami" messaggio, quindi un demone di configurazione che risponderebbe 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 email ...

È 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 fungerebbe da Producer creando un oggetto Message , posizionandolo su un particolare Queue , e andando avanti.
Ci sarebbe una serie di Consumer che si iscriverebbero alla Queue in questione e si occuperebbero di gestire il Message inviato. Si noti che nel corso di questa transazione, i Producer sono disaccoppiati dalla logica di come sarebbe gestito un dato Message .
I framework di messaggistica (ActiveMQ e simili) fungono da struttura portante per facilitare tali transazioni Message fornendo MessageBroker .

L'ho usato per inviare negoziazioni infragiornaliere tra diversi sistemi di gestione dei fondi. Se vuoi saperne di più su ciò che è un ottimo servizio di messaggistica tecnologica, posso consigliare vivamente 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 di acquistare roba 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 in coda.

L'ho usato per il mio progetto accademico che era un sito di vendita online simile ad Amazon. JMS è stato utilizzato per gestire le seguenti funzionalità:

  1. Aggiorna la posizione degli ordini effettuati dai clienti, mentre la spedizione viaggia da un luogo all'altro. Ciò è stato fatto inviando continuamente messaggi alla coda JMS.
  2. Avviso di eventi insoliti come ritardi nella spedizione e invio di e-mail al cliente.
  3. Se la consegna viene raggiunta la sua destinazione, inviando un evento di consegna.

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, vale a dire uno che agisce come coordinatore che avvierà il processo inviando un messaggio sulla coda e altri risponderanno di conseguenza inviando 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 tua risposta.

Apache Camel utilizzato insieme ad ActiveMQ è un ottimo modo per realizzare modelli di integrazione aziendale

Abbiamo utilizzato la messaggistica per generare preventivi online

Stiamo usando 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 avranno influenza sull'intero panorama del sistema ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top