Come riconoscere i consumatori nell'architettura AMQP

3

Sto facendo un progetto in cui sto usando un'architettura di microservizi. Tutti i servizi all'interno di questa architettura comunicano tra loro utilizzando un broker AMQP (RabbitMQ).

Quando qualcosa accade in un servizio, pubblica un messaggio su RabbitMQ ei servizi interessati a questo messaggio possono elaborarlo quando sono pronti. (Eventuale consistenza). Ora ho bisogno di creare funzionalità in grado di stimare l'impatto di un cambiamento in un messaggio, controllando quali utenti sono interessati da tale cambiamento.

La mia domanda è:

Quando modifico il formato di un messaggio come produttore, come faccio a sapere quali consumatori saranno interessati da tale modifica?

L'idea di utilizzare un broker AMQP è di essere sicuri che i servizi possano comunicare tra di loro senza che si conoscano. Quindi il produttore non conosce i consumatori. Questo è ciò che rende questo piuttosto confuso per me.

    
posta CGeense 05.10.2016 - 11:12
fonte

1 risposta

2

Indipendentemente dal tipo di canale o mezzo di comunicazione esistente tra due interfacce, quando il produttore modifica il formato del messaggio che i consumatori sanno come accettare, c'è un rischio di cambiamento sui client.

The whole idea of using a AMQP broker is to be sure that the services can communicate with each other without them knowing each other. So the producer doesn't know the consumers. That's what is making this pretty confusing for me.

Questa non è la ragione per cui si dovrebbe usare l'accodamento di messaggi asincroni in un'applicazione. Questo è il motivo per cui si impiegherebbe l'architettura SOA (Service Oriented Architecture) e Microservice. Pensa alle code dei messaggi come a un semplice canale di comunicazione con alcune proprietà speciali come la perdita di messaggi zero, la consegna garantita dei messaggi, la messaggistica asincrona e la più facile capacità di sviluppare transazioni reversibili su un messaggio.

Il formato del messaggio è essenzialmente il contratto che il produttore e il cliente concordano nello scambio di messaggi. Il cliente non deve conoscere il funzionamento interno del produttore, tuttavia deve essere in grado di ragionare sul produttore in termini di contratto. I componenti software sono ragionevolmente disaccoppiati. Ciò significa che se il produttore stava persistendo dati in un database, allora è possibile rifattare il database in modo fattibile, e fintanto che non si modifica il formato del messaggio, i clienti vengono ragionevolmente astratti da questo cambiamento, riducendo così i rischi.

Questo è l'aspetto dell'architettura software. Misura e ragiona sugli attributi qualitativi del software (modularità, componibilità, ecc.) Per prendere decisioni e compromessi per mitigare i rischi.

Se devi modificare il formato del messaggio, allora stai modificando il contratto. Il modo migliore per procedere in avanti è adottare un approccio disciplinato.

  1. Formalizza il formato del tuo messaggio. I formati strutturati come XML sono buoni qui perché posso definire uno schema XML che posso utilizzare per applicare e convalidare un messaggio.
  2. Crea la versione XSD in modo che sia più facile ragionare, identificare e descrivere i clienti che utilizzano il tuo servizio.
  3. Stub il servizio con uno strumento di derisione. Puoi farlo con strumenti di test delle unità o qualcosa di più sofisticato come SoapUI per emulare una modifica del formato dei messaggi del provider che non è ancora stata implementata.
  4. Esegui i test dei componenti e dei componenti dei tuoi clienti sulla tua interfaccia stubbata e verifica i casi d'uso.
  5. Implementa la modifica del provider, quindi l'unità e il componente testano questo contro i casi d'uso.
  6. Eseguire test di integrazione del sistema per verificare che client e provider comunichino correttamente tra loro.
risposta data 05.10.2016 - 14:23
fonte