Краткое руководство. Создание приложения java Устойчивые функции
Используйте Устойчивые функции, функцию Функции Azure для записи функций с отслеживанием состояния в бессерверной среде. Устойчивые функции управляет состоянием, контрольными точками и перезапусками в приложении.
В этом кратком руководстве вы создадите и протестируете приложение hello world Устойчивые функции в Java.
Самый простой Устойчивые функции приложение имеет три функции:
- Функция Orchestrator: рабочий процесс, который оркеструет другие функции.
- Функция действия: функция, вызываемая функцией оркестратора, выполняет работу и при необходимости возвращает значение.
- Клиентская функция: обычная функция в Azure, которая запускает функцию оркестратора. В этом примере используется функция, активироваемая HTTP.
В этом кратком руководстве описаны различные способы создания этого приложения hello world. Используйте селектор в верхней части страницы, чтобы задать предпочитаемый подход.
Необходимые компоненты
Для работы с этим кратким руководством вам понадобится:
Пакет sdk для разработчиков Java версии 8 или более поздней версии.
Apache Maven версии 3.0 или более поздней.
Последняя версия Функции Azure Core Tools.
Для Функции Azure 4.x требуется core Tools версии 4.0.4915 или более поздней версии.
Средство тестирования HTTP, которое обеспечивает безопасность данных. Дополнительные сведения см. в средствах тестирования HTTP.
Подписка Azure. Чтобы использовать Устойчивые функции, у вас должна быть учетная запись служба хранилища Azure.
Если у вас еще нет подписки Azure, создайте бесплатную учетную запись 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 версии 4 в настоящее время имеет необходимую поддержку Устойчивые функции для Java. Устойчивые функции для Java не поддерживается в пакетах расширений версии 3 и ранних версий. Дополнительные сведения о пакетах расширений см. в документации по пакетам расширений.
Устойчивые функции требуется поставщик хранилища для хранения состояния среды выполнения. Добавьте файл 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.51 -Dtrigger=durablefunctions
В запросах укажите следующие сведения:
Prompt | Действие |
---|---|
groupId | Введите com.function. |
artifactId | Введите myDurableFunction. |
version | Выберите 1.0-SNAPSHOT. |
package | Введите com.function. |
Y | Введите Y и нажмите клавишу ВВОД, чтобы подтвердить. |
Теперь у вас есть локальный проект с тремя функциями, которые находятся в базовом Устойчивые функции приложении.
Убедитесь, что com.microsoft:durabletask-azure-functions
это зависимость в файле pom.xml .
Настройка внутреннего поставщика хранилища
Устойчивые функции требуется поставщик хранилища для хранения состояния среды выполнения. Вы можете задать служба хранилища Azure в качестве поставщика хранилища в 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: Создать проект.Выберите Обзор. В диалоговом окне "Выбор папки" перейдите в папку, используемую для проекта, и нажмите кнопку "Выбрать".
В запросах укажите следующие сведения:
Prompt Действие Выбор языка Выберите Java. Выберите версию Java Выберите Java 8 или более поздней версии. Выберите версию Java, в которую работают функции в Azure, и ту, которую вы проверили локально. Укажите идентификатор группы Введите com.function. Укажите идентификатор артефакта Введите myDurableFunction. Укажите версию Введите 1.0-SNAPSHOT. Укажите имя пакета Введите com.function. Укажите имя приложения Введите myDurableFunction. Выберите средство сборки для проекта Java Выберите Maven. Выбор способа открытия проекта Выберите "Открыть" в новом окне.
Теперь у вас есть проект с примером функции HTTP. Эту функцию можно удалить, если вы хотите, так как вы добавите основные функции приложения Устойчивые функции на следующем шаге.
Добавление функций в проект
В палитре команд введите и выберите Функции Azure: Создать функцию.
Для фильтра шаблона "Изменить" выберите "Все".
В запросах укажите следующие сведения:
Prompt Действие Выбор шаблона для функции Выберите DurableFunctionsOrchestration. Укажите имя пакета Введите com.function. Укажите имя функции Введите УстойчивыйFunctionsOrchestrator. В диалоговом окне выберите " Выбрать учетную запись хранения", чтобы настроить учетную запись хранения, а затем следуйте инструкциям.
Теперь для приложения Устойчивые функции должны быть созданы три основных функции.
Настройка 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 Core Tools предоставляет возможность запуска проекта Функции Azure на локальном компьютере разработки.
Примечание.
Устойчивые функции для Java требуется Функции Azure 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-адреса. Теперь запросите состояние оркестрации.
Скопируйте значение
statusQueryGetUri
URL-адреса, вставьте его в адресную строку браузера и выполните запрос. Кроме того, можно продолжать использовать средство тестирования 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" }