2009-06-24 16 views
145

Stavo solo leggendo abit su JMS e Apache ActiveMQ. E si chiedeva che cosa utilizzassero le persone nel mondo reale per usare JMS o tecnologie simili per le code dei messaggi?Uso reale di JMS/code di messaggi?

risposta

152

JMS (ActiveMQ è un'implementazione del broker JMS) può essere utilizzato come meccanismo per consentire l'elaborazione di richieste asincrone. Potresti desiderare di farlo perché la richiesta richiede molto tempo per essere completata 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 determinato cliente. Come parte di mettere questo ordine (e la memorizzazione in un database) si potrebbe desiderare di portare un certo numero di compiti aggiuntivi:

  • Conservare l'ordine in una sorta di back-end del sistema di terze parti (come SAP)
  • Inviare un'email al cliente per informarlo il loro ordine è stato collocato

per fare questo il codice dell'applicazione potrebbe pubblicare 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'orderId, esaminando l'ordine nel database e quindi posizionandolo con un altro sistema di terze parti. Un'altra parte della tua domanda potrebbe essere responsabile per l'ordine e l'invio di una e-mail di conferma al cliente.

+0

Ciao @jon hai visto questo tag di documentazione? https://stackoverflow.com/documentation/jms/commit hanno solo bisogno di un supporto di comunicazione per abilitare l'argomento, penso che tu possa essere quello :) che consente loro di darci fantastici documenti su JMS – juanmf

+0

@Jon come ho capito jms è di per sé un'implementazione del modello di integrazione aziendale? – valik

+0

No, Mule o Camel sarebbero ... – Jon

80

Utilizzarli sempre 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 più lungo di quello, un progetto deve inviare la richiesta a una coda e inviare immediatamente un URL che l'utente può controllare per vedere quando il lavoro è finito.

Pubblica/sottoscrivi è un'altra buona tecnica per il disaccoppiamento di mittenti da molti ricevitori. È un'architettura flessibile, perché gli abbonati possono andare e venire se necessario.

+34

Dopo aver letto la risposta, aggiungo JMS alla coda "Quello che imparerò quest'anno" :) – Roman

14

Distribuito (a) calcolo sincrono.
Un esempio reale potrebbe essere un framework di notifica a livello di applicazione, che invia mail agli stakeholder in vari punti durante il corso dell'utilizzo dell'applicazione. Quindi l'applicazione agisce come Producer creando un oggetto Message, posizionandolo su un particolare Queue e spostandosi in avanti.
Ci sarebbe un gruppo di Consumer s che si iscrivesse allo Queue in questione e si occuperebbe di gestire lo Message inviato. Si noti che nel corso di questa transazione, gli Producer s sono disaccoppiati dalla logica di come un dato Message sarebbe gestito.
I framework di messaggistica (ActiveMQ e simili) fungono da backbone per facilitare tali transazioni Message fornendo MessageBroker s.

+0

Voglio l'elaborazione asincrona perché l'API di RestService è sincrono. Come farlo con ActiveMq e Jms.Please aiuto su questo. http://stackoverflow.com/questions/19706788/jersey-rest-web-service-with-activemq-middleware-integration. Grazie per il tuo aiuto e il tuo tempo – Kumar

3

Abbiamo usato la messaggistica per generare preventivi online

63

Ho avuto tanti usi sorprendenti per JMS:

  • Web di comunicazione Chat per il servizio clienti.

  • Registrazione di debug sul back-end. Tutti i server delle app trasmettono 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 (e.q. dal nome del server dell'app, chiamata api, livello log, userid, tipo di messaggio, ecc ...). Ho anche colorato l'output.

  • Eseguire il debug di registrazione su file. Come sopra, solo i pezzi specifici sono stati estratti usando i filtri e registrati nel file per la registrazione generale.

  • Avviso. Ancora una volta, una configurazione simile alla registrazione sopra, guardando per errori specifici e avvisando le persone con vari mezzi (e-mail, SMS, IM, pop-up Growl ...)

  • Configurazione e controllo dinamici dei cluster software. Ogni app server trasmetteva un messaggio "configure me", quindi un daemon di configurazione che rispondeva con un messaggio contenente tutti i tipi di informazioni di configurazione. Successivamente, se tutti i server delle app avessero bisogno di modificare le loro configurazioni in una volta, ciò potrebbe essere fatto dal demone config.

  • e il solito - in coda le transazioni per l'attività ritardata quali la fatturazione, l'elaborazione degli ordini, il provisioning, la generazione di e-mail ...

E 'bello ovunque si vuole garantire la consegna dei messaggi in modo asincrono.

8

Lo usiamo per avviare un'elaborazione asincrona che non vogliamo interrompere o entrare in conflitto con una transazione esistente.

Ad esempio, supponiamo che tu abbia una logica costosa e molto importante come "comprare cose", una parte importante del materiale di acquisto sarebbe "notificare il negozio". Effettuiamo la chiamata di notifica in modo asincrono in modo che qualsiasi logica/elaborazione coinvolta nella chiamata di notifica non blocchi o contenda risorse con la logica di business di acquisto. Risultato finale, acquisto completo, utente felice, otteniamo i nostri soldi e poiché la coda è garantita, il negozio viene avvisato non appena viene aperto o non appena c'è un nuovo articolo in coda.

+1

Si prega di aiuto su questo. http://stackoverflow.com/questions/19706788/jersey-rest-web-service-with-activemq-middleware-integration. Grazie per il tuo aiuto e il tuo tempo. – Kumar

+1

Ma a causa della richiesta è asincrona, a causa di un problema di rete, il messaggio potrebbe non essere inviato. Che dire di questo? Quando vuoi comprare cose, devi inviare la tua nitificazione. non è così? – grep

6

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 rete si occupa di esso senza/con fornire al mittente qualsiasi informazione sul destinatario.

Nel mio caso, ho usato JMS nello sviluppo di un middleware orientato ai messaggi (MOM) nella mia tesi, dove tipi specifici di oggetti orientati agli oggetti sono generati da un lato come richiesta, e compilati ed eseguiti dall'altro lato come risposta.

9

L'ho usato per inviare scambi intraday tra diversi sistemi di gestione di fondi. Se vuoi saperne di più su cosa sia un ottimo servizio di messaggistica, posso assolutamente consigliare il libro "Enterprise Integration Patterns". Ci sono alcuni esempi JMS per cose come richiesta/risposta e pubblicazione/sottoscrizione.

La messaggistica è uno strumento eccellente per l'integrazione.

3

Apache Camel utilizzato in combinazione con ActiveMQ è ottimo modo per farlo Enterprise Integration Pattern

2

Stiamo usando JMS per la comunicazione con i sistemi in un enorme numero di siti remoti su reti inaffidabili.L'accoppiamento libero in combinazione con una messaggistica affidabile produce un panorama del sistema stabile: ogni messaggio verrà inviato non appena tecnicamente possibile, problemi di rete più grandi non avranno influenza sull'intero panorama del sistema ...

6

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 seguenti caratteristiche:

  1. Aggiorna la posizione dei ordini dai clienti, come la spedizione viaggia da una posizione all'altra. Ciò è stato fatto inviando continuamente messaggi a JMS Queue.
  2. Avviso relativo a eventi insoliti come la spedizione in ritardo e l'invio di e-mail al cliente.
  3. Se la consegna viene raggiunta, invia un evento di consegna.

Abbiamo anche implementato più client remoti connessi al server principale. Se la connessione è disponibile, usano per accedere al database principale o se non utilizzano 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 funge da coordinatore, che avvierà il processo inviando un messaggio in coda e altri risponderanno di conseguenza inviando nuovamente un messaggio in coda. Come altri hanno già menzionato, questo era simile al modello pub/sub.