Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Используйте Устойчивые функции — функцию службы Функции Azure — для создания рабочих процессов без сервера с сохранением состояния на Java. В этом кратком руководстве вы клонируете и запустите пример приложения, демонстрирующий два распространённых шаблона оркестрации:
- Цепочка функций: вызывает действия последовательно (Токио → Сиэтл → Лондон).
- Разветвление/сведение: Параллельно запускает операции в пяти городах, а затем агрегирует результаты.
В итоге у вас будут обе оркестрации, запущенные локально с помощью эмулятора Durable Task Scheduler, и вы сможете просматривать их состояние на панели управления.
- Клонируйте и подготовьте пример проекта Hello Cities.
- Настройте эмулятор планировщика устойчивых задач и Azurite для локальной разработки.
- Создайте и запустите приложение-функцию, а затем запустите обе оркестрации.
- Просмотрите состояние оркестрации и выходные данные на панели мониторинга Durable Task Scheduler.
Необходимые условия
- Java 11+ (JDK) установлен.
- Apache Maven 3.0 или более поздней версии.
- Функции Azure Core Tools версии 4 или более поздней версии.
- Docker для запуска эмулятора и Azurite.
- Клонируйте репозиторий Durable Task Scheduler на GitHub для работы с примером начального уровня.
Настройте эмулятор планировщика Durable Task
Эмулятор планировщика задач Durable Task Scheduler предоставляет локальную среду разработки, чтобы можно было протестировать оркестрации без подписки Azure. Узел функций Java также требует Azurite для локального хранилища.
Запустите оба контейнера:
docker run -d --name dtsemulator -p 8080:8080 -p 8082:8082 \
mcr.microsoft.com/dts/dts-emulator:latest
docker run -d --name azurite -p 10000:10000 -p 10001:10001 -p 10002:10002 \
mcr.microsoft.com/azure-storage/azurite
Tip
После запуска эмулятора вы можете открыть панель мониторинга Durable Task Scheduler по адресу http://localhost:8082, чтобы отслеживать оркестрации.
Запустите пример для быстрого запуска
Перейдите в пример каталога Hello Cities:
cd samples/durable-functions/java/HelloCitiesУбедитесь, что
local.settings.jsonфайл содержит следующую конфигурацию:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "java", "DURABLE_TASK_SCHEDULER_CONNECTION_STRING": "Endpoint=http://localhost:8080;TaskHub=default;Authentication=None" } }Создайте проект:
mvn clean packageЗапустите приложение-функцию:
mvn azure-functions:runВ отдельном терминале активируйте оркестрацию цепочки функций :
$response = Invoke-RestMethod -Method POST -Uri http://localhost:7071/api/StartChaining $responseОтвет содержит URL-адреса состояния экземпляра оркестрации.
statusQueryGetUriСкопируйте значение и запустите его, чтобы проверить результат:Invoke-RestMethod -Uri $response.statusQueryGetUriЗапустите оркестрацию fan-out/fan-in:
$response = Invoke-RestMethod -Method POST -Uri http://localhost:7071/api/StartFanOutFanIn Invoke-RestMethod -Uri $response.statusQueryGetUri
Ожидаемые выходные данные
Запрос POST возвращает ответ JSON с URL-адресами состояния. Рассмотрим пример.
{
"id": "<instanceId>",
"statusQueryGetUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/<instanceId>?code=...",
"sendEventPostUri": "...",
"terminatePostUri": "...",
"purgeHistoryDeleteUri": "..."
}
Когда вы выполняете запрос statusQueryGetUri и значение runtimeStatus оркестрации равно Completed, результаты приветствия можно найти в поле output. Возвращается оркестрация цепочек:
{
"name": "ChainingOrchestration",
"runtimeStatus": "Completed",
"output": "Hello Tokyo! Hello Seattle! Hello London!"
}
Оркестрация вентилятора и вентилятора возвращает:
{
"name": "FanOutFanInOrchestration",
"runtimeStatus": "Completed",
"output": ["Hello Tokyo!", "Hello Seattle!", "Hello London!", "Hello Paris!", "Hello Berlin!"]
}
Tip
Если на runtimeStatus отображается Running или Pending, немного подождите и снова выполните запрос к statusQueryGetUri.
Откройте панель мониторинга Durable Task Scheduler по адресу http://localhost:8082, чтобы просмотреть состояние оркестрации и историю выполнения.
Изучение кода
Пример проекта в src/main/java/com/example/Functions.java содержит все три типа функций, необходимых для приложения Устойчивые функции.
Функция активности
Действие SayHello принимает имя города и возвращает приветствие:
@FunctionName("SayHello")
public String sayHello(
@DurableActivityTrigger(name = "city") String city) {
return "Hello " + city + "!";
}
Функции оркестратора
Оркестратор цепочек последовательно вызывает SayHello для трех городов:
@FunctionName("ChainingOrchestration")
public String chainingOrchestration(
@DurableOrchestrationTrigger(name = "ctx") TaskOrchestrationContext ctx) {
String result = "";
result += ctx.callActivity("SayHello", "Tokyo", String.class).await();
result += " " + ctx.callActivity("SayHello", "Seattle", String.class).await();
result += " " + ctx.callActivity("SayHello", "London", String.class).await();
return result;
}
Оркестратор fan-out/fan-in планирует действия параллельно:
@FunctionName("FanOutFanInOrchestration")
public List<String> fanOutFanInOrchestration(
@DurableOrchestrationTrigger(name = "ctx") TaskOrchestrationContext ctx) {
String[] cities = {"Tokyo", "Seattle", "London", "Paris", "Berlin"};
List<Task<String>> parallelTasks = new ArrayList<>();
for (String city : cities) {
parallelTasks.add(ctx.callActivity("SayHello", city, String.class));
}
List<String> results = new ArrayList<>();
for (Task<String> task : parallelTasks) {
results.add(task.await());
}
return results;
}
Клиентские функции
Клиентские функции, активированные ПО HTTP, запускают каждую оркестрацию:
@FunctionName("StartChaining")
public HttpResponseMessage startChaining(
@HttpTrigger(name = "req", methods = {HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Void> request,
@DurableClientInput(name = "durableContext") DurableClientContext durableContext) {
DurableTaskClient client = durableContext.getClient();
String instanceId = client.scheduleNewOrchestrationInstance("ChainingOrchestration");
return durableContext.createCheckStatusResponse(request, instanceId);
}
Конфигурация
В примере в качестве сервера хранения используется эмулятор Durable Task Scheduler. Это настроено в host.json:
{
"extensions": {
"durableTask": {
"hubName": "default",
"storageProvider": {
"type": "azureManaged",
"connectionStringName": "DURABLE_TASK_SCHEDULER_CONNECTION_STRING"
}
}
}
}
Строка подключения эмулятора задается в local.settings.json:
{
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "java",
"DURABLE_TASK_SCHEDULER_CONNECTION_STRING": "Endpoint=http://localhost:8080;TaskHub=default;Authentication=None"
}
}
Очистите ресурсы
Остановите контейнеры эмулятора после завершения:
docker stop dtsemulator azurite && docker rm dtsemulator azurite
Дальнейшие действия
- Узнайте о общих шаблонах приложений Устойчивые функции.
- Разверните приложение Устойчивые функции в Azure.
- Узнайте о поставщиках хранилища Устойчивые функции.