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à.
AWS Flow FrameworkConcetti di base: Scambio di dati tra le attività e i flussi di lavoro
Quando chiami un metodo client di attività asincrono, restituisce immediatamente un oggetto Promessa (noto anche come Futuro) che rappresenta il valore restituito del metodo di attività. Inizialmente, la Promessa è in uno stato non pronto e il valore restituito è indefinito. Dopo che il metodo di attività ha completato il task e viene restituito, il framework esegue il marshalling del valore restituito nella rete al lavoratore di flusso di lavoro, che assegna un valore alla Promessa e fa entrare l'oggetto in uno stato pronto.
Anche se il metodo di attività non ha un valore restituito, puoi ancora utilizzare la Promessa per gestire l'esecuzione del flusso di lavoro. Se passi una Promessa restituita a un metodo client di attività o a un metodo flusso di lavoro, questa ritarda l'esecuzione fino a quando l'oggetto è pronto.
Se passi una o più promesse a un metodo client di attività, il framework mette in coda il task ma ritarda la pianificazione fino a quando tutti gli oggetti di input sono pronti. Poi estrae i dati da ogni Promessa ed ne esegue il marshalling su internet al lavoratore di attività, che li passa al metodo di attività come tipo standard.
Nota
Se devi trasferire grandi quantità di dati tra i lavoratori di flusso di lavoro e attività, l'approccio consigliato è archiviare i dati in una posizione comoda e passare le informazioni di recupero. Ad esempio, puoi archiviare i dati in un bucket Amazon S3 e passare l'URL associato.
La promessa <T> Tipo
Il tipo Promise<T>
è simile per alcuni aspetti al tipo Java Future<T>
. Entrambi i tipi rappresentano valori restituiti da metodi asincroni e sono inizialmente non definiti. Puoi accedere al valore di un oggetto chiamando il suo metodo get
. Al di là di ciò, i due tipi si comportano in modo diverso.
-
Future<T>
è un costrutto di sincronizzazione che permette a un'applicazione di attendere il completamento di un metodo asincrono. Se chiamiget
e l'oggetto non è pronto, si blocca fino a quando l'oggetto è pronto. -
Con
Promise<T>
, la sincronizzazione è gestita dal framework. Se chiamiget
e l'oggetto non è pronto,get
genera un'eccezione.
Lo scopo primario di Promise<T>
è gestire il flusso di dati da un'attività a un'altra. Garantisce che un'attività non venga eseguita fino a quando i dati di input sono validi. In molti casi, i lavoratori di flusso di lavoro non devono accedere agli oggetti Promise<T>
direttamente; passano semplicemente gli oggetti da un'attività a un'altra e lasciano che i lavoratori di framework e attività gestiscano i dettagli. Per accedere al valore dell'oggetto Promise<T>
in un lavoratore di flusso di lavoro, devi essere certo che l'oggetto sia pronto prima di chiamare il suo metodo get
.
-
L'approccio consigliato è passare l'oggetto
Promise<T>
a un metodo flusso di lavoro asincrono ed elaborare i valori al suo interno. Un metodo asincrono ritarda l'esecuzione fino a quando tutti gli oggetti di inputPromise<T>
sono pronti, il che ti garantisce l'accesso sicuro ai valori. -
Promise<T>
espone un metodoisReady
che restituiscetrue
se l'oggetto è pronto. Non è consigliato utilizzareisReady
per analizzare un oggettoPromise<T>
, maisReady
è utile in alcune circostanze. Per un esempio, consultaAWS Flow FrameworkRicette di.
LaAWS Flow Frameworkper Java include anche unSettable<T>
tipo, derivato daPromise<T>
e ha un comportamento simile. La differenza è che il framework di solito imposta il valore di unPromise<T>
object e il lavoratore di flusso di lavoro è responsabile della definizione del valore di unSettable<T>
Per un esempio, consultaAWS Flow FrameworkRicette di
Ci sono alcune circostanze in cui un lavoratore di flusso di lavoro deve creare un oggetto Promise<T>
e definire il suo valore. Ad esempio, un metodo asincrono che restituisce un oggetto Promise<T>
deve creare un valore restituito.
-
Per creare un oggetto che rappresenta un valore tipizzato, chiama il metodo statico
Promise.asPromise
che crea un oggettoPromise<T>
del tipo appropriato, definisce il suo valore e lo fa entrare in uno stato pronto. -
Per creare un oggetto
Promise<Void>
, chiama il metodo staticoPromise.Void
.
Nota
Promise<T>
può rappresentare qualunque tipo valido. Tuttavia, se bisogna eseguire il marshalling dei dati su Internet, il tipo deve essere compatibile con il convertitore di dati. Per ulteriori informazioni, consulta la prossima sezione.
Convertitore e marshalling dei dati
AWS Flow Framework effettua il marshalling dei dati su Internet utilizzando un convertitore di dati. Per impostazione predefinita, il framework utilizza un convertitore di dati che è basato sul processore Jackson JSON