AWS Flow FrameworkConcetti di base: Scambio di dati tra le attività e i flussi di lavoro - AWS Flow Framework per Java

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 chiami get e l'oggetto non è pronto, si blocca fino a quando l'oggetto è pronto.

  • Con Promise<T>, la sincronizzazione è gestita dal framework. Se chiami get 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 input Promise<T> sono pronti, il che ti garantisce l'accesso sicuro ai valori.

  • Promise<T> espone un metodo isReady che restituisce true se l'oggetto è pronto. Non è consigliato utilizzare isReady per analizzare un oggetto Promise<T>, ma isReady è 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 oggetto Promise<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 statico Promise.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. Tuttavia, il convertitore ha dei limiti. Ad esempio, non può effettuare il marshalling delle mappe che non utilizzano le stringhe come chiavi. Se il convertitore predefinito non è sufficiente per la tua applicazione, puoi implementare un convertitore di dati personalizzato. Per informazioni dettagliate, consulta DataConverters.