Garantire le transazioni con più ascoltatori

3

Recentemente il mio team ha ereditato un code-base con un problema interessante.

Il sistema mantiene i record storici avendo più ascoltatori sullo stesso evento. Questi ascoltatori eseguono in serie, quindi se abbiamo l'ascoltatore A, B e C, B aspetterebbe che A termini prima prima di C e così via.

Ogni listener aggiorna una tabella separata.

Tuttavia, se il sistema si arresta mentre stiamo tentando di scrivere B, allora le tabelle in A, B e C verranno fuori sincrono.

C'è una buona soluzione per ottenere una scrittura transazionale per questi ascoltatori senza accoppiare gli ascoltatori insieme?

    
posta Victor3y 19.02.2018 - 02:40
fonte

2 risposte

4

Passa la stessa transazione a ogni partecipante. Quindi usano la stessa transazione e ancora non si conoscono. Ovviamente, ora (o almeno il loro risultato) è accoppiato, ma se tutti o nessuno di loro riesce è l'intero punto , giusto?

Il passaggio alla transazione non è infallibile (potrebbero semplicemente non utilizzarlo se sono negligenti o mediocri) ma è l'opzione migliore che hai, non c'è modo di forzare un pezzo di codice utilizzare una transazione se sarebbero in grado di connettersi da soli come sembra essere il modo in cui funziona oggi.

Se A, B e C sono su sistemi diversi, puoi utilizzare transazioni distribuite per quello scenario.

    
risposta data 19.02.2018 - 09:48
fonte
0

Non è difficile come pensi.

Quello che puoi fare è numerare le tue transazioni e controllare se quei numeri sono sincronizzati. Se il tuo sistema va su e giù di nuovo e vede una transazione è accaduta in A ma non puoi trovare un numero corrispondente in B o C, rimuovi ogni transazione con quel numero come se non fosse mai successo.

    
risposta data 20.02.2018 - 15:25
fonte

Leggi altre domande sui tag