Come può un messaggio di aggiornamento da un broker rabbitmq raggiungere tutti i client rilevanti tramite più server websocket?

0

Diciamo che ho più server websocket che mantengono molte connessioni ai client per inviare aggiornamenti. Questi server Websocket estrarranno tali aggiornamenti da un broker di rabbitmq e li trasmetteranno a tutti i clienti rilevanti che si trovano in una pagina che necessita di un aggiornamento.

La mia domanda è: come possono tutti i clienti che si trovano sulla pagina [x] ottenere un aggiornamento se sono suddivisi su più server websocket? WS-server-A riceverà un aggiornamento e lo inoltrerà a tutti i suoi client sulla pagina [x], ma cosa ne pensi dei client connessi a WS-server-b che ha clienti sulla stessa pagina?

(modificato sotto per aggiungere ulteriori dettagli)

Il modo in cui immagino questo scenario è così:

Per un forum immaginario, abbiamo un server Web multi-thread che esegue il rendering delle pagine e risponde alle chiamate API. Quando qualcuno salva un post su un argomento, il server Web salva il post sul db, quindi passa il post a rabbitmq.

Rabbitmq inoltra questo post allo scambio pertinente (ad esempio, "nuovi post".) Esistono anche altri scambi: "nuovi argomenti", "avvisi", ecc.), in cui il server Websocket lo preleva, esamina il " intestazione "e inoltra il post a tutti gli utenti che si trovano nella pagina pertinente.

    
posta Jaigus 03.08.2016 - 21:26
fonte

2 risposte

2

Ciò che probabilmente accade in questo momento è che alcuni messaggi vengono elaborati dal server A e mai consegnati a B, e alcuni vengono elaborati da B, ma A non li riceve mai. Questo perché non hai specificato lo scambio: quello predefinito è lo scambio diretto , il che significa che i messaggi vengono inviati a una delle code alla volta, usando il round robin.

Affinché più server possano ricevere il messaggio, puoi utilizzare il routing Exchange Fanout . Con questo tipo di routing, lo stesso messaggio verrà indirizzato a tutte le code.

Il tipo di routing di scambio è specificato quando crei lo scambio .

Puoi trovare ulteriori informazioni sui diversi tipi di scambi sul sito web ufficiale di RabbitMQ.

    
risposta data 04.08.2016 - 01:00
fonte
0

Lo scenario di cui parli è affrontato al meglio utilizzando il modello di messaggistica secondaria di Pub . In RabbitMQ questo è supportato dal tipo Exchange Fanout. Dai un'occhiata al tutorial di Pub-Sub sul sito web di Coniglio per una procedura dettagliata di creazione di uno scambio di fanout.

    
risposta data 04.08.2016 - 16:24
fonte