Uso reale delle code JMS / messaggi? [chiuso]


182

Stavo solo leggendo un po 'su JMS e Apache ActiveMQ. E si chiedeva a che cosa servisse il mondo reale le persone qui hanno usato JMS o tecnologie simili per la coda dei messaggi?

Risposte:


191

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:

  • Archivia l'ordine in una sorta di sistema di back-end di terze parti (come SAP)
  • Invia una e-mail al cliente per informarli che è stato effettuato l'ordine

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.


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

@Jon come capisco jms è di per sé un'implementazione del modello di integrazione aziendale?
Valik,

No, Mulo o Camel sarebbero ...
Jon

1
Se un numero qualsiasi di app sta consumando i messaggi nella coda, come fa mai la coda a sapere quando eliminare i vecchi messaggi?
Basil Bourque,

95

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à.


41
Dopo aver letto la tua risposta, aggiungerò JMS alla mia coda "Cosa imparerò quest'anno" :)
Roman

Ai nostri giorni, invece di utilizzare le specifiche JMS, possiamo usare chiamate di metodo asincrone. Per maggiori informazioni, consultare: docs.oracle.com/javaee/6/tutorial/doc/gkkqg.html
geo

3
Non sono abbastanza uguali. Non c'è consegna garantita con una chiamata del metodo asincrono; nessuna nozione di argomenti che possono essere inviati a più ascoltatori contemporaneamente.
Duffymo,

75

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.


5
Non mi sembra giusto usare JMS per il log di debug. Le code e i messaggi hanno un costo significativo e la registrazione (per il debug che di solito registra molto) deve essere il più veloce possibile.
Marco Altieri,

19

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 Producercreando un Messageoggetto, posizionandolo su un particolare Queuee andando avanti.
Ci sarebbe un gruppo di utenti Consumerche si iscriverebbero alla Queuedomanda in questione e si occuperebbero di gestire l' Messageinvio. Si noti che nel corso di questa transazione, gli Producers sono disaccoppiati dalla logica di come un dato Messageverrebbe gestito.
I framework di messaggistica (ActiveMQ e simili) fungono da spina dorsale per facilitare tali Messagetransazioni fornendo MessageBrokers.


Voglio l'elaborazione asincrona perché RestService Api è sincrona. Come farlo con ActiveMq e Jms. Per favore, aiutatemi su questo. stackoverflow.com/questions/19706788/… . Grazie per l'aiuto e il tempo
Kumar,

10

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.


8

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.


1
Per favore aiutatemi su questo. stackoverflow.com/questions/19706788/… . Grazie per l'aiuto e il tempo.
Kumar,

2
Ma a causa della richiesta è asincrona, a causa di un problema di rete, il messaggio potrebbe non essere inviato. Che dire di questo? Quando si desidera acquistare materiale, è necessario inviare la nitificazione. non è così?
grep,

8

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à:

  1. Aggiorna la posizione degli ordini effettuati dai clienti, mentre la spedizione viaggia da una posizione a un'altra. Ciò è stato fatto inviando continuamente messaggi alla coda JMS.
  2. Avvisare di eventi insoliti come ritardare la spedizione e quindi inviare 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, 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.


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 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 .



5

Abbiamo utilizzato la messaggistica per generare preventivi online


4

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 ...

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.