MQ Architecture: come gestire i vecchi messaggi in coda e rilasciare un aggiornamento consumatore / produttore

2

Quindi, ad esempio, se ho un produttore che invia un messaggio

{id: 1} 

a un consumatore che si aspetta quell'oggetto json. E c'è una tonnellata di messaggi seduti in coda in attesa di essere processati. Sto anche scrivendo del codice nel produttore & consumatore in modo che accetti {project_id: 1} anziché {id: 1} ora. Ciò farà sì che tutti i messaggi attualmente presenti nella coda vengano reindirizzati alla coda di messaggi non recapitati.

Questa pratica è generalmente cattiva? O come posso assicurare che tutti i messaggi non aggiornati vengano elaborati prima di rilasciare un aggiornamento.

    
posta Luke Xu 14.10.2018 - 00:01
fonte

1 risposta

2

Cerchiamo di assicurarci che tutte le modifiche a un contratto di messaggio siano compatibili sia avanti che indietro. In quei rari casi in cui c'è un vero cambiamento nel contratto del messaggio, consideriamo un messaggio diverso (un nuovo tipo di messaggio).

Utilizziamo il pattern di modifica parallela per gestire tali modifiche di rottura.

Nei casi in cui abbiamo il controllo sui consumatori a valle, ci assicuriamo che siano pronti a consumare il nuovo tipo di messaggio prima che inizi a essere pubblicato. Conserverà inoltre la sua capacità di consumare il vecchio tipo di messaggio in modo che possa scaricare la coda di tutti i messaggi esistenti. A seconda della piattaforma di messaggistica, potresti dover utilizzare o meno due code.

Nei casi in cui non abbiamo un controllo diretto sui consumatori a valle, pubblichiamo sia i vecchi che i nuovi messaggi in parallelo. Ciò conferisce ai consumatori a valle un periodo di grazia in cui possono migrare lontano dai vecchi messaggi a favore di quelli nuovi. Contrassegniamo i vecchi messaggi come deprecati durante questo periodo. Dopo il periodo di prova, smettiamo semplicemente di pubblicare i vecchi messaggi.

    
risposta data 14.10.2018 - 13:23
fonte

Leggi altre domande sui tag