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?
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 –
Non l'ho scritto esplicitamente, ma il sistema deve essere autonomo senza la necessità di un amministratore esterno. –