Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Use Durable Functions, um recurso de Azure Functions, para gravar funções com estado em um ambiente sem servidor. Durable Functions gerencia o estado, os pontos de verificação e as reinicializações em seu aplicativo.
Neste início rápido, você criará e testará um aplicativo Durable Functions no Java.
Um aplicativo de Durable Functions básico tem três funções:
-
Função Orchestrator (
Cities): um fluxo de trabalho que orquestra outras funções. -
Função de atividade (
Capitalize): uma função que o orquestrador chama para executar o trabalho e retornar um valor. -
Função cliente (
StartOrchestration): uma função disparada por HTTP que inicia o orquestrador.
Este início rápido oferece três caminhos de instalação. Use o seletor na parte superior da página para escolher sua abordagem preferida:
- Configuração manual: crie cada arquivo manualmente para controle total sobre a estrutura do projeto.
- Comando Maven: use um arquétipo Maven para estruturar o projeto em um comando.
- Visual Studio Code: use a extensão Azure Functions do VS Code para gerar o projeto por meio de uma interface do usuário guiada.
Pré-requisitos
Para concluir este guia de início rápido, você precisa:
O Java Developer Kit versão 8 ou posterior instalado.
Apache Maven versão 3.0 ou posterior instalado.
A última versão do Azure Functions Core Tools.
Para o Azure Functions 4.x, o Core Tools versão 4.0.4915 ou posterior é necessário.
Uma ferramenta de teste para HTTP que mantém seus dados seguros. Para obter mais informações, confira Ferramentas de teste HTTP.
Visual Studio Code com a extensão Azure Functions instalada (necessária somente para o caminho de instalação Visual Studio Code).
Uma assinatura do Azure. Para usar Durable Functions, você deve ter uma conta Armazenamento do Azure.
Se você ainda não tiver uma conta do Azure, crie uma conta gratuita antes de começar.
Adicionar as dependências e os plug-ins necessários ao projeto
Adicione o código a seguir ao arquivo pom.xml . Antes de copiá-lo, substitua your-unique-app-name por um nome de aplicativo de funções globalmente exclusivo. Ajuste region, javaVersion e resourceGroup para corresponder ao seu ambiente.
<properties>
<azure.functions.maven.plugin.version>1.18.0</azure.functions.maven.plugin.version>
<azure.functions.java.library.version>3.0.0</azure.functions.java.library.version>
<durabletask.azure.functions>1.0.0</durabletask.azure.functions>
<functionAppName>your-unique-app-name</functionAppName>
</properties>
<dependencies>
<dependency>
<groupId>com.microsoft.azure.functions</groupId>
<artifactId>azure-functions-java-library</artifactId>
<version>${azure.functions.java.library.version}</version>
</dependency>
<dependency>
<groupId>com.microsoft</groupId>
<artifactId>durabletask-azure-functions</artifactId>
<version>${durabletask.azure.functions}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
</plugin>
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-functions-maven-plugin</artifactId>
<version>${azure.functions.maven.plugin.version}</version>
<configuration>
<appName>${functionAppName}</appName>
<resourceGroup>java-functions-group</resourceGroup>
<appServicePlanName>java-functions-app-service-plan</appServicePlanName>
<region>westus</region>
<runtime>
<os>windows</os>
<javaVersion>11</javaVersion>
</runtime>
<appSettings>
<property>
<name>FUNCTIONS_EXTENSION_VERSION</name>
<value>~4</value>
</property>
</appSettings>
</configuration>
<executions>
<execution>
<id>package-functions</id>
<goals>
<goal>package</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
</plugins>
</build>
Adicionar os arquivos JSON necessários
Adicione um arquivo host.json ao seu diretório de projeto. Ela deve ser parecida com o seguinte exemplo:
{
"version": "2.0",
"logging": {
"logLevel": {
"DurableTask.AzureStorage": "Warning",
"DurableTask.Core": "Warning"
}
},
"extensions": {
"durableTask": {
"hubName": "JavaTestHub"
}
},
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.*, 5.0.0)"
}
}
Observação
Durable Functions para Java requer o pacote de extensão v4. Não há suporte para pacotes anteriores. Para obter mais informações, consulte a documentação dos pacotes de extensão.
As Durable Functions precisam ter um provedor de armazenamento para armazenar o estado de runtime. Adicione um arquivo local.settings.json ao diretório do projeto para configurar o provedor de armazenamento. Para usar o Armazenamento do Azure como provedor, defina o valor de AzureWebJobsStorage como a cadeia de conexão da sua conta do Armazenamento do Azure:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "<your storage account connection string>",
"FUNCTIONS_WORKER_RUNTIME": "java"
}
}
Importante
O arquivo local.settings.json pode conter segredos. Certifique-se de adicioná-lo ao arquivo .gitignore para evitar comprometê-lo no controle de código-fonte.
Criar seu orquestrador Durable Functions, atividade e funções de cliente
O código de exemplo a seguir mostra um exemplo básico de cada tipo de função:
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.*;
import java.util.*;
import com.microsoft.durabletask.*;
import com.microsoft.durabletask.azurefunctions.DurableActivityTrigger;
import com.microsoft.durabletask.azurefunctions.DurableClientContext;
import com.microsoft.durabletask.azurefunctions.DurableClientInput;
import com.microsoft.durabletask.azurefunctions.DurableOrchestrationTrigger;
public class DurableFunctionsSample {
/**
* This HTTP-triggered function starts the orchestration.
*/
@FunctionName("StartOrchestration")
public HttpResponseMessage startOrchestration(
@HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request,
@DurableClientInput(name = "durableContext") DurableClientContext durableContext,
final ExecutionContext context) {
context.getLogger().info("Java HTTP trigger processed a request.");
DurableTaskClient client = durableContext.getClient();
String instanceId = client.scheduleNewOrchestrationInstance("Cities");
context.getLogger().info("Created new Java orchestration with instance ID = " + instanceId);
return durableContext.createCheckStatusResponse(request, instanceId);
}
/**
* This is the orchestrator function, which can schedule activity functions, create durable timers,
* or wait for external events in a way that's completely fault-tolerant.
*/
@FunctionName("Cities")
public String citiesOrchestrator(
@DurableOrchestrationTrigger(name = "taskOrchestrationContext") TaskOrchestrationContext ctx) {
String result = "";
result += ctx.callActivity("Capitalize", "Tokyo", String.class).await() + ", ";
result += ctx.callActivity("Capitalize", "London", String.class).await() + ", ";
result += ctx.callActivity("Capitalize", "Seattle", String.class).await() + ", ";
result += ctx.callActivity("Capitalize", "Austin", String.class).await();
return result;
}
/**
* This is the activity function that is invoked by the orchestrator function.
*/
@FunctionName("Capitalize")
public String capitalize(@DurableActivityTrigger(name = "name") String name, final ExecutionContext context) {
context.getLogger().info("Capitalizing: " + name);
return name.toUpperCase();
}
}
Criar um projeto de Durable Functions local usando o comando Maven
Execute o seguinte comando para gerar um projeto que contém as funções básicas de um aplicativo de Durable Functions:
mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DarchetypeVersion=1.62 -Dtrigger=durablefunctions
Nos prompts, forneça as informações a seguir:
| Rápido | Ação |
|---|---|
| groupId | Insira com.function. |
| artifactId | Insira myDurableFunction. |
| versão | Selecione 1.0-SNAPSHOT. |
| pacote | Insira com.function. |
| Y | Insira Y e selecione Enter para confirmar. |
Agora você tem um projeto local que tem as três funções que estão em um aplicativo de Durable Functions básico. O arquétipo inclui com.microsoft:durabletask-azure-functions como uma dependência em seu arquivo pom.xml automaticamente.
Configurar o provedor de armazenamento de back-end para Durable Functions
As Durable Functions precisam ter um provedor de armazenamento para armazenar o estado de runtime. Você pode definir o Armazenamento do Microsoft Azure como o provedor de armazenamento em local.settings.json. Use a cadeia de conexão da sua conta de armazenamento do Azure como o valor para AzureWebJobsStorage como neste exemplo:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "<your storage account connection string>",
"FUNCTIONS_WORKER_RUNTIME": "java"
}
}
Importante
O arquivo local.settings.json pode conter segredos. Adicione-o ao arquivo .gitignore para evitar emiti-lo ao controle do código-fonte.
Criar seu projeto local
Em Visual Studio Code, selecione F1 (ou selecione Ctrl/Cmd+Shift+P) para abrir a paleta de comandos. No prompt (
>), insira e selecione Azure Functions: Criar Novo Projeto.
Selecione Procurar. Na caixa de diálogo Selecionar Pasta, vá para uma pasta a ser usada em seu projeto e escolha Selecionar.
Nos prompts, forneça as informações a seguir:
Rápido Ação Selecione um idioma Selecione Java. Selecione uma versão do Java Selecione Java 8 ou posterior. Selecione a versão do Java na qual suas funções são executadas no Azure e uma que você verificou localmente. Forneça uma ID de grupo Insira com.function. Forneça uma ID de artefato Insira myDurableFunction. Forneça uma versão Insira 1.0-SNAPSHOT. Forneça um nome de pacote Insira com.function. Forneça um nome de aplicativo Insira myDurableFunction. Selecione a ferramenta de build para projeto Java Selecione Maven. Selecione como deseja abrir o projeto Selecione Abrir em nova janela.
Agora você tem um projeto que tem uma função HTTP de exemplo. Você pode remover a função HTTP gerada porque adiciona o Durable Functions na próxima etapa.
Adicionar funções ao projeto
Na paleta de comandos, insira e selecione Azure Functions: Criar Função.
Em Alterar filtro de modelo, selecione Todos.
Nos prompts, forneça as informações a seguir:
Rápido Ação Selecione um modelo para sua função Selecione DurableFunctionsOrchestration. Forneça um nome de pacote Insira com.function. Forneça um nome para a função Insira DurableFunctionsOrchestrator. Na caixa de diálogo, escolha Selecionar conta de armazenamento para configurar uma conta de armazenamento e, em seguida, siga os prompts.
Agora você tem as três funções básicas geradas para um aplicativo de Durable Functions.
Configurar pom.xml e host.json para Durable Functions
Adicione a seguinte dependência ao arquivo pom.xml:
<dependency>
<groupId>com.microsoft</groupId>
<artifactId>durabletask-azure-functions</artifactId>
<version>1.0.0</version>
</dependency>
Adicione a extensions propriedade ao arquivo host.json . Se o arquivo já tiver outras propriedades, mescle o extensions bloco no JSON existente:
{
"version": "2.0",
"extensions": {
"durableTask": {
"hubName": "JavaTestHub"
}
},
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.*, 5.0.0)"
}
}
Testar a função localmente
Azure Functions Core Tools oferece a capacidade de executar um projeto Azure Functions em seu computador de desenvolvimento local.
Se você estiver usando o Visual Studio Code, abra uma nova janela de terminal e execute os seguintes comandos para criar o projeto:
mvn clean packageEm seguida, execute a função durável:
mvn azure-functions:runNo painel do terminal, copie o ponto de extremidade da URL da sua função acionada por HTTP.
Use sua ferramenta de teste HTTP para enviar uma solicitação HTTP POST para o ponto de extremidade da URL.
A resposta será parecida com o exemplo a seguir:
{ "id": "d1b33a60-333f-4d6e-9ade-17a7020562a9", "purgeHistoryDeleteUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/d1b33a60-333f-4d6e-9ade-17a7020562a9?code=ACCupah_QfGKo...", "sendEventPostUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/d1b33a60-333f-4d6e-9ade-17a7020562a9/raiseEvent/{eventName}?code=ACCupah_QfGKo...", "statusQueryGetUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/d1b33a60-333f-4d6e-9ade-17a7020562a9?code=ACCupah_QfGKo...", "terminatePostUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/d1b33a60-333f-4d6e-9ade-17a7020562a9/terminate?reason={text}&code=ACCupah_QfGKo..." }A resposta é o resultado inicial da função HTTP. Ela informa que a orquestração durável foi iniciada com sucesso. Ela ainda não exibe o resultado final da orquestração. A resposta inclui algumas URLs úteis. Por enquanto, consulte o status da orquestração.
Copie o valor da URL para
statusQueryGetUri, cole-o na barra de endereço do seu navegador e execute a solicitação. Como alternativa, você pode continuar a usar a ferramenta de teste HTTP para emitir a solicitação GET.A solicitação consulta a instância de orquestração do status. Você deve ver que a instância foi concluída e inclui as saídas ou resultados do durable functions, como neste exemplo:
{ "name": "Cities", "instanceId": "d1b33a60-333f-4d6e-9ade-17a7020562a9", "runtimeStatus": "Completed", "input": null, "customStatus": "", "output":"TOKYO, LONDON, SEATTLE, AUSTIN", "createdTime": "2022-12-12T05:00:02Z", "lastUpdatedTime": "2022-12-12T05:00:06Z" }