2012-09-26 12 views
13

Quando si utilizza RabbitMQ per l'invio di messaggi, si dispone fondamentalmente di scambi, code e associazioni. Ho capito la loro idea e come si relazionano tra loro, ma non sono abbastanza sicuro di chi stabilisce cosa.RabbitMQ: scambi, code e rilegature - chi installa cosa?

Fondamentalmente, ho tre scenari nella mia applicazione.

Scenario 1: Un editore, molti lavoratori elabora

Quello che voglio ottenere è una componente che invia messaggi a una coda, e non vi sarà diversi processi di lavoro che gestiscono gli elementi in quella coda. Questo mi sembra abbastanza facile. La configurazione è la seguente:

  • Exchange: 1 scambio con tipo 'diretta'
  • coda: 1 coda
  • Binding: La coda è legato allo scambio

Ogni volta che un messaggio è inviato allo scambio, viene consegnato alla coda e i processi di lavoro ottengono i loro compiti.

Tutto deve essere durevole.

Quindi chi imposta cosa? A mio parere:

  • Produttore crea scambio
  • Produttore crea coda (come ci può essere nessun processi di lavoro in esecuzione, e il messaggio sarebbe persa altrimenti se non c'era nessuna coda)
  • produttore fa il legame della coda per lo scambio
  • consumatori semplicemente ascoltare sulla coda

Destra?

Scenario 2: Un editore, più utenti, i messaggi volatili

Il secondo scenario è molto diverso. Fondamentalmente, si tratta di uno scenario di pubblicazione/sub in cui ogni messaggio viene inviato a tutti i client in ascolto. Se un client va offline, non riceve più messaggi e non vengono memorizzati da nessuna parte per lui. Questo significa che la seguente configurazione:

  • Exchange: 1 scambio con tipo 'fan-out'
  • coda: n code, una per ogni consumatore
  • Binding: Ogni coda ha bisogno di essere vincolato allo scambio

Quindi chi imposta cosa?A mio parere:

  • Produttore crea scambio
  • consumatori crea coda (come lo è la propria coda, e il produttore non può sapere chi è interessato nei messaggi)
  • consumatori crea vincolante per la sua coda Consumer scambio
  • ascolta la sua coda di

Destra?

Scenario 3: Un editore, più utenti, i messaggi durevoli

In sostanza lo stesso scenario 2, ma i messaggi non devono andare perdute se un consumatore non è in linea. Secondo me questo non dovrebbe cambiare nulla - giusto?

+0

C'è una terza persona disponibile per l'installazione: un amministratore esterno. Vedere questa risposta ad un'altra domanda per maggiori informazioni: http://stackoverflow.com/questions/6148381/rabbitmq-persistent-message-with-topic-echange/6155733#6155733 –

+0

Non l'ho scritto esplicitamente, ma il sistema deve essere autonomo senza la necessità di un amministratore esterno. –

risposta

5

penso che quello che dici è giusto tranne lo Scenario 3.

Se i messaggi non devono essere persi se un consumatore non è in linea, allora avete bisogno code durevoli e le code non possono essere auto_delete'd.

Tutto il resto mi sembra giusto.

Nel caso dello scenario 2 è anche possibile consentire a RabbitMQ di generare automaticamente i nomi delle code e quindi lasciare che tali code vengano eliminate automaticamente una volta disconnesso l'utente.

+0

Grazie mille :-)! –