Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Apportare modifiche al codice del decisore: la funzione Versioni multiple e gli Indicatori di caratteristiche
Questa sezione mostra come evitare modifiche non retrocompatibili a un decisore tramite due metodi:
la funzione Versioni multiple fornisce una soluzione di base.
la funzione Versioni multiple con gli Indicatori di caratteristiche è uno sviluppo della funzione Versioni multiple: non vengono introdotte nuove versioni del flusso di lavoro e non c'è bisogno di un nuovo codice per aggiornare la versione.
Prima di provare queste soluzioni, prendi familiarità con la sezione Scenario di esempio, che spiega le cause e gli effetti delle modifiche non retrocompatibili al codice del decisore.
Il processo di riproduzione e le modifiche del codice
Quando un lavoratore di decisioneAWS Flow Framework per Java esegue un'attività decisionale, deve prima ricostruire lo stato corrente dell'esecuzione prima di potervi aggiungere passaggi. Il decisore compie questa operazione con un processo chiamato riproduzione.
Il processo di riproduzione riesegue dall'inizio il codice del decisore, esaminando al contempo la cronologia degli eventi che si sono già verificati. Questo esame permette al framework di reagire ai segnali o al completamento di task e di sbloccare gli oggetti Promise
nel codice.
Quando il framework esegue il codice decisore, assegna un ID a ciascuna attività pianificata (un'attività, una funzione Lambda, un timer, un flusso di lavoro secondario o un segnale in uscita) incrementando un contatore. Il framework comunica questo ID ad Amazon SWF e lo aggiunge agli eventi della cronologia, ad esempioActivityTaskCompleted
.
Affinché il processo di riproduzione vada a buon fine, è importante che il codice del decisore sia deterministico e pianifichi gli stessi task nello stesso ordine per ogni decisione in ogni esecuzione del flusso di lavoro. Se non rispetti questo requisito, il framework potrebbe, ad esempio, non riuscire a far corrispondere l'ID di un evento ActivityTaskCompleted
con un oggetto Promise
esistente.