Argomento JMS vs Code


191

Mi chiedevo quale fosse la differenza tra una coda JMS e un argomento JMS.

La pagina ActiveMQ dice

Temi

In JMS un argomento implementa la semantica di pubblicazione e sottoscrizione . Quando pubblichi un messaggio, questo viene inviato a tutti gli abbonati interessati, quindi zero a molti abbonati riceverà una copia del messaggio. Solo gli abbonati che avevano un abbonamento attivo nel momento in cui il broker riceve il messaggio riceveranno una copia del messaggio.

code

Una coda JMS implementa la semantica del bilanciamento del carico . Un singolo messaggio verrà ricevuto esattamente da un consumatore. Se non ci sono consumatori disponibili al momento dell'invio, il messaggio verrà conservato fino a quando non sarà disponibile un consumatore in grado di elaborare il messaggio. Se un consumatore riceve un messaggio e non lo riconosce prima della chiusura, il messaggio verrà riconsegnato a un altro consumatore. Una coda può avere molti consumatori con un carico di messaggi bilanciato tra i consumatori disponibili.

Voglio avere "qualcosa" che invierà una copia del messaggio a ciascun abbonato nella stessa sequenza di quella in cui il messaggio è stato ricevuto dal broker ActiveMQ.

qualche idea?

Risposte:


147

Ciò significa che un argomento è appropriato. Una coda indica che un messaggio va a uno e un solo abbonato possibile. Un argomento va a tutti gli abbonati.


4
Qualche idea su come funziona il bilanciamento del carico per le code in JMS o WSO2 MB?
Kulasangar,

è interessante perché stavo cercando di eseguire il debug di un abbonato e quando ha inviato un argomento l'abbonato non è stato chiamato ma quando ha inviato alla coda ha funzionato
vmrvictor

54

Gli argomenti sono per il modello editore-abbonato, mentre le code sono da punto a punto.


31

Un argomento JMS è il tipo di destinazione in un modello di distribuzione da 1 a molti. Lo stesso messaggio pubblicato viene ricevuto da tutti gli abbonati che consumano . Puoi anche chiamarlo modello "broadcast". Puoi pensare a un argomento come l'equivalente di un Soggetto in un modello di progettazione di Observer per il calcolo distribuito. Alcuni provider JMS scelgono in modo efficiente di implementarlo come UDP anziché TCP. Per l'argomento, la consegna del messaggio è "spara e dimentica" - se nessuno ascolta, il messaggio scompare. Se non è quello che vuoi, puoi usare "abbonamenti durevoli".

Una coda JMS è una destinazione da 1 a 1 di messaggi. Il messaggio è ricevuto solo da uno dei destinatari che consumano (si prega di notare: l'uso costante di abbonati per "client dell'argomento e destinatari per client in coda evita confusione). I messaggi inviati a una coda vengono archiviati sul disco o sulla memoria fino a quando qualcuno non lo preleva o scade. Pertanto, le code (e gli abbonamenti durevoli) richiedono una gestione attiva dell'archiviazione, è necessario pensare ai consumatori lenti.

Nella maggior parte degli ambienti, direi, gli argomenti sono la scelta migliore perché è sempre possibile aggiungere componenti aggiuntivi senza dover modificare l'architettura. I componenti aggiunti potrebbero essere monitoraggio, registrazione, analisi, ecc. All'inizio del progetto non si saprà mai quali saranno i requisiti in 1 anno, 5 anni, 10 anni. Il cambiamento è inevitabile, abbraccialo :-)


28

È semplice come quello:

Code = Inserisci> Preleva (invia al singolo abbonato) 1: 1

Argomenti = Inserisci> Trasmissione (invia a tutti gli abbonati) 1: n

inserisci qui la descrizione dell'immagine


2
Un esempio può essere per un semplice social network. A qualcuno piace un post. Il backend pubblica un evento "POST LIKE" sull'argomento. È consumato da 3 abbonati: notificationProcessor(invia una notifica al poster), karmaProcessor(dà karma a liker e poster), feedProcessor(si sposta verso l'alto nei feed delle persone). Tutto in modo asincrono, ovviamente.
Siddhartha,

@Siddhartha, questa potrebbe essere una risposta racchiusa in un esempio, grazie!
selezione il

8

Per quanto riguarda la conservazione dell'ordine, consultare questa pagina ActiveMQ . In breve: l'ordine è preservato per i singoli consumatori, ma con più consumatori l'ordine di consegna non è garantito.


7

code

Professionisti

  • Modello di messaggistica semplice con un flusso di comunicazione trasparente
  • I messaggi possono essere recuperati rimettendoli in coda

Contro

  • Solo un consumatore può ricevere il messaggio
  • Implica un accoppiamento tra produttore e consumatore in quanto è una relazione uno a uno

Temi

Professionisti

  • Più consumatori possono ricevere un messaggio
  • Disaccoppiamento tra produttore e consumatore (modello di pubblicazione e sottoscrizione)

Contro

  • Flusso di comunicazione più complicato
  • Non è possibile recuperare un messaggio per un singolo listener

4

Se hai N consumatori allora:

Gli argomenti JMS recapitano i messaggi a N di N Le code JMS recapitano i messaggi a 1 di N

Hai detto che stai "cercando di avere una 'cosa' che invierà una copia del messaggio a ciascun abbonato nella stessa sequenza di quella in cui il messaggio è stato ricevuto dal broker ActiveMQ."

Quindi vuoi usare un argomento in modo che tutti gli N abbonati ottengano una copia del messaggio.


1

ARGOMENTO :: l'argomento è una o più comunicazioni ... (multipunto o pubblica / abbonati) EX: -immagina che un editore pubblichi il film su YouTube quindi tutti i suoi abbonati riceveranno una notifica .... QUEVE :: queve è one-to -una comunicazione ... Es: -Quando pubblichi una richiesta di ricarica, andrà a un solo qreciever ... ricorda sempre se la richiesta va a tutti i qreceiver, allora è avvenuta la ricarica multipla, quindi durante lo sviluppo di analisi adatta per un'applicazione


-1

La coda è un oggetto gestito JMS utilizzato per contenere i messaggi in attesa di consumare gli abbonati. Quando tutti gli abbonati hanno consumato il messaggio, il messaggio verrà rimosso dalla coda.

L'argomento è che tutti gli abbonati a un argomento ricevono lo stesso messaggio quando il messaggio viene pubblicato.


2
I messaggi in coda verranno consumati una sola volta da un singolo consumatore, ecco perché una coda implementa un bilanciamento del carico. Le iscrizioni agli argomenti possono essere durature : l'abbonato può ricevere il messaggio molto tempo dopo la pubblicazione (se l'abbonato è stato chiuso e si riaccende, ad esempio).
Gruber,
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.