Best practice per garantire l'univocità / correttezza dei nomi nelle code di messaggi in un'architettura / sistema distribuito con microservizio

6

Mi chiedevo quale sarebbe stata una buona soluzione per garantire che i nomi delle code venissero inseriti correttamente e utilizzati solo dalle applicazioni corrette in un sistema di grandi dimensioni che utilizza code di messaggi per scambiare messaggi.

Abbiamo un grande sistema scritto in Java e Apache Camel. È suddiviso in diversi microservizi in cui utilizzano code di messaggi per comunicare tra loro. I nomi delle code sono ora stringhe, che tendono ad essere piuttosto semplici, come "incupdate" o "inccreate". Quando il sistema continua a crescere e continuiamo ad aggiungere altri servizi, temo che qualcuno riutilizzi un nome di coda che esiste già, il che creerebbe bug che non verrebbero visualizzati nei test locali e sarebbe difficile eseguire il debug. Una soluzione semplice a questo è semplicemente aggiungere il nome del servizio come prefisso al nome della coda, questo garantirebbe l'univocità tra i servizi.

Ma stavo pensando, "Perché non prenderlo un po 'oltre"? Cosa succede se ho creato un riferimento, a cui tutti i servizi hanno accesso, ad esempio un enum, in cui ogni servizio utilizza solo voci nel riferimento come nomi di coda? In questo modo non solo garantire l'unicità, ma garantirebbe anche la correttezza (ad esempio errori di battitura nei nomi delle code). E fornirebbe anche l'evidenziazione del codice per ogni luogo in cui viene utilizzato il nome della coda.

Hai qualche soluzione o suggerimento per un problema come questo? La soluzione "di riferimento" è valida a tutti? Posso vedere un problema con esso, ed è che ogni servizio deve effettivamente avere accesso all'enumerazione, il che significa iniettarlo da qualche parte. Penso che potremmo usare Maven o Spring per questo, ma non ne sono sicuro.

    
posta haraldfw 25.07.2016 - 12:17
fonte

1 risposta

1

Ho progettato il nostro sistema per utilizzare una combinazione del nome dell'ambiente e del nome completo della classe nome dell'oggetto che è stato serializzato nel corpo dei messaggi nella coda, nel nome della macchina e nel nome dell'applicazione.

Non c'è confusione tra i messaggi provenienti dagli ambienti say "Staging" e "Test" perché il nome dell'ambiente fa parte del nome della coda. Nota che eseguiamo ambienti di "Integrazione" e "Test" sulla stessa macchina.

Nel nostro sistema ogni applicazione sa se è in esecuzione in 'Sviluppo', 'Test' o qualsiasi altra cosa, e qualsiasi applicazione che produce o consuma una particolare coda deve già avere accesso alla classe che è serializzata nel corpo del messaggio, e quindi può calcolare il nome della coda in modo accurato senza configurazione aggiuntiva.

    
risposta data 12.08.2016 - 22:59
fonte

Leggi altre domande sui tag