Sto cercando di capire la migliore soluzione per il seguito. Qualsiasi aiuto sarebbe fantastico.
Quindi in pratica ho un servizio (che può essere ridimensionato orizzontalmente), che ascolta una coda. Ogni messaggio ricevuto verrà inviato a un lavoro e elaborato contemporaneamente.
Il lavoro sarà (nello stesso ordine):
- Genera alcuni dati in base al carico utile del messaggio
- Memorizza i dati su Redis
- Invia i dati a un altro servizio
Il mio problema si verifica quando viene ricevuto un altro messaggio per lo stesso record logico (stesso record di tabella ma con dati modificati).
Devo assicurarmi che l'ultima versione dei dati sia memorizzata nella cache su Redis e inviata al servizio successivo nello scenario in cui vengono elaborati 2 o più messaggi con lo stesso ID record. Quindi evita che un lavoro con una vecchia versione del payload stia sovrascrivendo l'ultimo.
Penso di utilizzare un meccanismo di blocco distribuito, non sono sicuro che sia efficiente, soprattutto quando voglio che l'ultima versione venga inviata al prossimo servizio il più rapidamente possibile.
Forse in qualche modo cancellare un lavoro per un carico utile obsoleto invece di bloccare l'intero lavoro? Usare Redis pubsub per comunicare tra il servizio (quando si ridimensiona) o avere un modo migliore?