Conceitos básicos AWS Flow Framework: Intercâmbio de dados entre atividades e fluxos de trabalho - AWS Flow Framework para Java

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Conceitos básicos AWS Flow Framework: Intercâmbio de dados entre atividades e fluxos de trabalho

Ao chamar um método de cliente de atividade assíncrono, ele retorna imediatamente um objeto Promessa (também conhecido como um Future), que representa o valor de retorno do método de atividade. Inicialmente, a Promessa está em um estado não pronto e o valor de retorno está indefinido. Após a conclusão da tarefa do método de atividade e seu retorno, a estrutura ordena o valor de retorno em toda a rede para o operador do fluxo de trabalho, o que atribuí um valor para a Promessa e coloca o objeto em um estado pronto.

Mesmo que um método de atividade não possua valor de retorno, ainda é possível usar a Promessa para executar a execução do fluxo de trabalho. Se você repassar uma promessa retornada para um método de cliente de atividades ou para um método de fluxo de trabalho assíncrono, ela adia a execução até que o objeto esteja pronto.

Se você enviar uma ou mais Promessas para um método de cliente de atividade, a estrutura enfileira a tarefa mas adia o agendamento até que os objetos estejam prontos. Em seguida ela extrai os dados de cada Promessa e ordena-os pela internet para o operador de atividade, que envia-os para o método de atividade como um tipo padrão.

nota

Se você precisar transferir grandes quantidades de dados entre os operadores de fluxo de trabalho e de atividade, a abordagem preferencial é armazenar os dados em um local conveniente e enviar somente as informações de recuperação. Por exemplo, você pode armazenar os dados em um bucket do Amazon S3 e passar o URL associado.

A Promessa <T> Type

O tipo Promise<T> é de certa forma semelhante ao tipo Future<T> em Java. Ambos os tipos representam os valores retornados por métodos assíncronos e estão inicialmente indefinidos. Acesse o valor de um objeto ao chamar o seu método get. Além disso, os dois tipos comportam-se de forma diferente.

  • Future<T> é uma construção de sincronização que permite que um aplicativo espere a conclusão de um método assíncrono. Se você chamar get e o objeto não estiver pronto, ele é bloqueia até que o objeto esteja pronto.

  • Com Promise<T>, a sincronização é gerenciada pela estrutura. Se você chamar get e o objeto não estiver pronto, get gerará uma exceção.

A finalidade principal da Promise<T> é gerenciar o fluxo de dados entre as atividades. Isso garante que uma atividade não seja executada até que os dados de entrada sejam válidos. Em muitos casos, os operadores de fluxo de trabalho não precisam acessar os objetos Promise<T> diretamente, eles apenas enviam os objetos de uma atividade para outra e deixam que a estrutura e os operadores de atividade cuidem dos detalhes. Para acessar o valor de um objeto Promise<T> em um operador de fluxo de trabalho, você deve ter certeza que o objeto está pronto antes de chamar seu método get.

  • A abordagem preferencial é enviar o objeto Promise<T> para um método de fluxo de trabalho assíncrono e processar o valor ali. Um método assíncrono adia a execução até que todos os objetos Promise<T> de entrada estejam prontos, o que garante que os valores possam ser acessados com segurança.

  • Promise<T> expõe um método isReady que retorna true se o objeto estiver pronto. Usar isReady para consultar um objeto Promise<T> não é recomendado, mas isReady é útil em certas ocasiões. Para ver um exemplo, consulte Recibos AWS Flow Framework.

O AWS Flow Framework para Java também inclui um tipo Settable<T>, que é derivado do Promise<T> e tem comportamento semelhante. A diferença é que a estrutura geralmente define o valor de um objeto Promise<T> e o trabalhador do fluxo de trabalho é responsável por definir o valor de um Settable<T>. Para obter um exemplo, consulte Recibos AWS Flow Framework.

Existem ocasiões onde um operador de fluxo de trabalho precisa criar um objeto Promise<T> e definir o seu valor. Por exemplo, um método assíncrono que retorna um objeto Promise<T> precisa criar um valor de retorno.

  • Para criar um objeto que representa um valor digitado, chame o método Promise.asPromise estático, que cria um objeto Promise<T> do tipo adequado, define o seu valor e coloca-o em estado pronto.

  • Para criar um objeto Promise<Void>, chame o método Promise.Void estático.

nota

Promise<T> pode representar qualquer tipo válido. No entanto, se os dados devem ser ordenados na internet, o tipo deve ser compatível com o conversor de dados. Consulte a próxima seção para obter detalhes.

Conversores de dados e ordenação

O AWS Flow Framework ordena os dados na Internet usando um conversor de dados. Por padrão, a estrutura usa um conversor de dados que é baseado no processador de Jackson JSON. Contudo, esse conversor tem algumas limitações. Por exemplo, ele não pode ordenar mapas que não utilizam strings como chaves. Se o conversor padrão não for suficiente para o seu aplicativo, você pode implementar um conversor de dados personalizado. Para obter mais detalhes, consulte DataConverters.