Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Используйте Durable Functions, функцию Azure Functions для записи функций с отслеживанием состояния в бессерверной среде. Durable Functions управляет состоянием, контрольными точками и перезапусками в приложении.
В этом кратком руководстве вы создадите и протестируете приложение hello world Устойчивые функции в Java.
Самое базовое приложение Durable Functions имеет три функции:
- Функция Оркестратор: рабочий процесс, который координирует другие функции.
- Функция действия: функция, вызываемая функцией оркестратора, выполняет работу и при необходимости возвращает значение.
- функция Клиент: обычная функция в Azure, которая запускает функцию оркестратора. В этом примере используется функция, активироваемая HTTP.
В этом кратком руководстве описаны различные способы создания этого приложения hello world. Используйте селектор в верхней части страницы, чтобы задать предпочитаемый подход.
Необходимые условия
Чтобы завершить это краткое начальное руководство, вам требуется:
Установлен Java Developer Kit версии 8 и более поздняя.
Apache Maven версии 3.0 или более поздней.
Последняя версия Azure Functions Core Tools.
Для Azure Functions 4.x требуется Core Tools версии 4.0.4915 или более поздней.
Средство тестирования HTTP, которое обеспечивает безопасность данных. Дополнительные сведения см. в статье Инструменты тестирования HTTP.
Подписка Azure. Чтобы использовать Durable Functions, у вас должна быть учетная запись Azure Storage.
Если у вас нет аккаунта Azure, создайте бесплатную учетную запись перед началом.
Добавление необходимых зависимостей и подключаемых модулей в проект
Добавьте следующий код в файл pom.xml :
<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>
Добавление необходимых JSON-файлов
Добавьте файл host.json в каталог проекта. Он должен выглядеть примерно так:
{
"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)"
}
}
Замечание
Важно отметить, что только пакет расширений Azure Functions v4 в настоящее время имеет необходимую поддержку для Durable Functions для Java. Устойчивые функции для Java не поддерживаются в пакетах расширений версии 3 и ранних версиях. Дополнительные сведения о пакетах расширений см. в документации по пакетам расширений.
Для Durable Functions необходим поставщик хранилища для сохранения состояния времени выполнения.
Добавьте файл local.settings.json в каталог проекта, чтобы настроить поставщика хранилища. Чтобы использовать Azure хранилище в качестве поставщика, установите значение AzureWebJobsStorage в строку подключения вашей учетной записи Azure хранилища:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "<your storage account connection string>",
"FUNCTIONS_WORKER_RUNTIME": "java"
}
}
Создайте ваши функции
В следующем примере кода показан базовый пример каждого типа функции:
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();
}
}
Создание локального проекта с помощью команды Maven
Выполните следующую команду, чтобы создать проект, содержащий основные функции приложения Устойчивые функции:
mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DarchetypeVersion=1.62 -Dtrigger=durablefunctions
В подсказках укажите следующие сведения:
| Подсказка | Действие |
|---|---|
| groupId | Введите com.function. |
| artifactId | Введите myDurableFunction. |
| version | Выберите 1.0-SNAPSHOT. |
| пакета | Введите com.function. |
| Y | Введите Y и нажмите клавишу ВВОД, чтобы подтвердить. |
Теперь у вас есть локальный проект с тремя функциями, которые входят в состав приложения на базе Durable Functions.
Убедитесь, что com.microsoft:durabletask-azure-functions настроен как зависимость в pom.xml.
Настройка внутреннего поставщика хранилища
Устойчивым функциям требуется поставщик хранилища для сохранения состояния среды выполнения. Вы можете задать Azure Storage в качестве поставщика хранилища в local.settings.json. Используйте строку подключения учетной записи хранения Azure в качестве значения AzureWebJobsStorage, например:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "<your storage account connection string>",
"FUNCTIONS_WORKER_RUNTIME": "java"
}
}
Создание локального проекта
В Visual Studio Code выберите F1 (или нажмите клавиши CTRL/CMD+SHIFT+P), чтобы открыть палитру команд. В командной строке (
>) введите и выберите Azure Functions: создание нового проекта.
Нажмите кнопку "Обзор". В диалоговом окне "Выбор папки" перейдите в папку, используемую для проекта, и нажмите кнопку "Выбрать".
В подсказках укажите следующие сведения:
Подсказка Действие Выбор языка Выберите Java. Выберите версию Java Выберите Java 8 или более поздней версии. Выберите версию Java, в которую работают функции в Azure, и ту, которую вы проверили локально. Укажите идентификатор группы Введите com.function. Укажите идентификатор артефакта Введите myDurableFunction. Укажите версию Введите 1.0-SNAPSHOT. Укажите имя пакета Введите com.function. Укажите имя приложения Введите myDurableFunction. Выберите инструмент сборки для проекта Java Выберите Maven. Выбор способа открытия проекта Выберите "Открыть" в новом окне.
Теперь у вас есть проект с примером функции HTTP. Эту функцию можно удалить, если вы хотите, так как вы добавите основные функции приложения Устойчивые функции на следующем шаге.
Добавление функций в проект
В палитре команд введите и выберите Azure Functions: Create Function.
Для Изменить фильтр шаблона выберите Все.
В подсказках укажите следующие сведения:
Подсказка Действие Выбор шаблона для функции Выберите DurableFunctionsOrchestration. Укажите имя пакета Введите com.function. Укажите имя функции Введите DurableFunctionsOrchestrator. В диалоговом окне выберите " Выбрать учетную запись хранения", чтобы настроить учетную запись хранения, а затем следуйте инструкциям.
Теперь для приложения Durable Functions должны быть созданы три основные функции.
Настройка pom.xml и host.json
Добавьте в файл pom.xml следующую зависимость:
<dependency>
<groupId>com.microsoft</groupId>
<artifactId>durabletask-azure-functions</artifactId>
<version>1.0.0</version>
</dependency>
Добавьте свойство extensions в файл host.json:
"extensions": { "durableTask": { "hubName": "JavaTestHub" }}
Локальное тестирование функции
Azure Functions Core Tools предоставляет возможность запуска проекта Azure Functions на локальном компьютере разработки.
Замечание
Для использования постоянных функций в Java требуется версия Azure Functions Core Tools 4.0.4915 или более поздняя. Вы можете увидеть, какая версия установлена, выполнив func --version команду в терминале.
Если вы используете Visual Studio Code, откройте новое окно терминала и выполните следующие команды, чтобы создать проект:
mvn clean packageЗатем запустите устойчивую функцию:
mvn azure-functions:runНа панели терминала скопируйте конечную точку URL-адреса функции, активируемой HTTP.
Используйте средство тестирования HTTP для отправки HTTP-запроса POST в конечную точку URL-адреса.
Ответ должен выглядеть так:
{ "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..." }Ответ — это начальный результат функции HTTP. Это позволяет узнать, что устойчивая оркестрация успешно запущена. Он еще не отображает конечный результат оркестрации. Ответ включает несколько полезных URL-адреса. Теперь запросите состояние оркестрации.
Скопируйте значение
statusQueryGetUriURL-адреса, вставьте его в адресную строку браузера и выполните запрос. Кроме того, можно продолжать использовать средство тестирования HTTP для выдачи запроса GET.Запрос к экземпляру оркестрации для проверки статуса. Вы увидите, что экземпляр завершен и содержит выходные данные или результаты устойчивой функции, как в следующем примере:
{ "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" }