Tasti di routing AMQP che identificano gli anti-pattern quando si usano gli argomenti

0

Sto lavorando alle specifiche per la creazione di una piattaforma di servizi web e AMQP è il protocollo di messaggistica utilizzato per l'interazione tra i componenti di questa piattaforma.

Sto utilizzando scambi di argomenti per questo e voglio definire un approccio comune + qualche convenzione di denominazione per le chiavi di instradamento .

Per questi argomenti RMQ esemplifica / raccomanda l'uso di cose come: %codice% scambio di argomenti - RMQ doc

Ora, ho un collega che raccomanda di utilizzare il nome del componente di destinazione nell'argomento per i casi in cui il messaggio è destinato a essere elaborato da questo componente. E.g: lazy.orange.elephant quick.orange.male.rabbit , orange.orange_juicer_01

Ti sembra un anti-pattern?

    
posta fedesismo 12.11.2016 - 09:26
fonte

1 risposta

4

Mi sembra un errore. Il punto di pubblicazione di un messaggio è che sei disaccoppiato dal componente o dai componenti che ricevono il messaggio.

La logica aziendale in base alla quale il messaggio viene smistato o indirizzato in qualsiasi modo non rientra nell'ambito del componente di pubblicazione.

Ma c'è ovviamente una connessione tra l'editore e i consumatori del messaggio in quanto entrambi conoscono il nome dell'argomento. cioè se hai un solo argomento devi ascoltare tutti i messaggi. Quindi la scelta del nome è importante.

Il mio sentimento qui è che il tuo collega sta confondendo argomenti e code. È positivo che il componente abbia una propria coda privata. Ciò gli consente di funzionare senza urtare altri componenti. Ma i nomi degli argomenti devono essere pubblici e immutabili in modo da poter inserire componenti nel flusso generale.

Quindi nel tuo caso avrei l'argomento 'orange' e il nome della coda 'juicer1'. Quando il componente juicer si avvia, crea il suo nome di coda Univoco e indirizza tutti i messaggi di / some / fanout / round robin 'orange'. Quindi inizia a estrarli dalla sua coda privata per essere elaborati.

Instradamento complesso e "MasterWorkers" al fine di ottenere il routing più complesso richiesto, dovrai programmare tale routing in un componente e impostarlo un po 'come questo

Worker -> starts up and contacts master worker "I'm ready for work! here is my queue name"
MasterWorker -> remembers the workers queue name
incoming queue -> pulled by MasterWorker
MasterWorker 
    -> do I have any Workers available? 
    -> does the avaialble worker match business logic x?
    -> send the work to the workers queue
    
risposta data 12.11.2016 - 12:06
fonte

Leggi altre domande sui tag