Conceptos básicos de AWS Flow Framework: intercambio de datos entre actividades y flujos de trabajo - AWS Flow Framework para Java

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Conceptos básicos de AWS Flow Framework: intercambio de datos entre actividades y flujos de trabajo

Cuando se llama a un método del cliente de actividades asíncronas, este devuelve inmediatamente un objeto de Promesa (también denominado Futuro), que representa el valor de retorno del método de la actividad. Al principio, la promesa se encuentra en un estado no preparado y el valor de retorno no está definido. Cuando el método de la actividad realiza la tarea y se devuelve, el marco de trabajo serializa el valor de retorno a través de la red hasta el proceso de trabajo del flujo de trabajo, que asigna un valor a la promesa y pone el objeto en estado preparado.

Puede utilizar la promesa para administrar la ejecución del flujo de trabajo incluso si un método de actividad no tiene un valor de retorno. Si pasa una promesa devuelta a un método del cliente de actividad o un método de flujo de trabajo asíncrono, la ejecución se aplaza hasta que el objeto está preparado.

Si pasa una o más promesas a un método de cliente de actividad, el marco de trabajo pone en cola la tarea, pero aplaza su programación hasta que todos los objetos están preparados. Luego, extrae los datos de cada promesa y los serializa a través de Internet hasta el proceso de trabajo de actividad, que lo pasa al método de actividad como un tipo estándar.

nota

Si tiene que transferir grandes cantidades de datos entre los procesos de trabajo de flujos de trabajo y actividades, lo mejor es almacenar los datos en un lugar práctico y pasar solamente la información de recuperación. Por ejemplo, puede almacenar los datos en un bucket de Amazon S3 y pasar la URL asociada.

El Promise <T> Type

El tipo Promise<T> es similar en cierto modo al tipo Java Future<T>. Ambos tipos representan valores que devuelven los métodos asíncronos y que inicialmente no están definidos. Para obtener acceso al valor de un objeto, hay que llamar a su método get. Aparte de eso, los dos tipos se comportan de forma muy diferente.

  • Future<T> es una construcción de sincronización que permite que una aplicación espere a que finalice el método asíncrono. Si llama a get y el objeto no está preparado, se bloquea hasta que lo está.

  • Con Promise<T>, el marco de trabajo se encarga de la sincronización. Si llama a get y el objeto no está preparado, get genera una excepción.

La principal finalidad de Promise<T> es administrar el flujo de datos de una actividad a otra. Garantiza que una actividad no se ejecute hasta que los datos de entrada sean válidos. En muchos casos, los procesos de trabajo no tienen que obtener acceso a los objetos Promise<T> directamente; simplemente pasan los objetos de una actividad a otra y dejan que el marco de trabajo y los procesos de trabajo de la actividad se encarguen de los detalles. Para obtener acceso al valor de un objeto Promise<T> en un proceso de trabajo de flujo de trabajo, debe estar seguro de que el objeto está preparado antes de llamar a su método get.

  • Lo más recomendable es pasar el objeto Promise<T> a un método de flujo de trabajo asíncrono y procesar allí los valores. Un método asíncrono aplaza la ejecución hasta que todos sus objetos Promise<T> de entrada estén preparados, lo que garantiza que pueda obtener acceso a sus valores de manera segura.

  • Promise<T> expone un método isReady que devuelve true si el objeto está preparado. No se recomienda utilizar isReady para sondear un objeto Promise<T>, pero isReady resulta útil en determinadas circunstancias. Para ver un ejemplo, consulte Recetas de AWS Flow Framework.

El AWS Flow Framework para Java incluye también un tipo Settable<T>, que se obtiene de Promise<T> y tiene un comportamiento similar. La diferencia es que normalmente el marco de trabajo establece el valor de un objeto Promise<T> y el proceso de trabajo del flujo de trabajo es responsable de establecer el valor de un objeto Settable<T>. Para ver un ejemplo, consulte Recetas de AWS Flow Framework.

Hay algunas circunstancias en las que un proceso de trabajo de flujo de trabajo tiene que crear un objeto Promise<T> y establecer su valor. Por ejemplo, un método asíncrono que devuelve un objeto Promise<T> tiene que crear un valor de retorno.

  • Para crear un objeto que represente un valor con tipo, llame al método Promise.asPromise estático, que crea un objeto Promise<T> del tipo apropiado, establece su valor y lo pone en estado preparado.

  • Para crear un objeto Promise<Void>, llame al método Promise.Void estático.

nota

Promise<T> puede representar cualquier tipo válido. Sin embargo, si hay que serializar los datos por Internet, el tipo debe ser compatible con el conversor de datos. Para obtener más información, consulte la siguiente sección.

Conversores de datos y serialización

AWS Flow Framework serializa los datos por Internet utilizando un conversor de datos. De manera predeterminada, el marco de trabajo utiliza un conversor de datos que está basado en el procesador JSON de Jackson. Sin embargo, este conversor tiene algunas limitaciones. Por ejemplo, puede serializar mapas que no utilizan cadenas como claves. Si el conversor predeterminado no es suficiente para su aplicación, puede implementar un conversor de datos personalizado. Para obtener más información, consulte DataConverters.