Durable Functions for JavaがPublic previewになったので試してみた

2022年6月22日にDurable Functions for JavaがPublic previewとして公開されました。

azure.microsoft.com

チュートリアルがあるのでそれを試してみました。

docs.microsoft.com

環境

環境としては以下の通りです。

  • macOS BigSur
  • Java 11
  • Gradle 7.4
  • Azure Functions Core Tools 3.0.4585

依存関係の設定

build.gradleを記述します。こんな感じに書きました。

plugins {
    id 'java'
    id 'com.microsoft.azure.azurefunctions' version '1.8.0'
}

group 'com.example'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'com.microsoft.azure.functions:azure-functions-java-library:2.0.1'
    implementation 'com.microsoft:durabletask-azure-functions:1.0.0-beta.1'
}

azurefunctions {
    appName = 'funcmiyohidedurable1'
}

ローカルで動かす場合でもAzure Functions Plugin for GradleをPluginとして追加し、appNameを設定しておく必要があります。

github.com

local.settings.json

ローカル用の設定ファイルとして、local.settings.jsonを作成します。チュートリアルには書かれていませんが、Gitでのバージョン管理で誤ってコミットしてしまわないように.gitignorelocal.settings.jsonを追加しておくと良いかと思います。

DurableFunctionsSampleクラス

チュートリアルにあるDurableFunctionsSampleクラスを実装します。チュートリアルではstartHelloCitiesメソッドにてmethodsHttpMethod.POSTが指定されていますが、テストのしやすさを考えてHttpMethod.GETを設定しました。

JAVA_HOMEの設定

環境変数JAVA_HOMEを設定しないとうまく動きませんでしたので、設定しておきます。macOS BigSurでは以下のような記述をシェル内でしておきます。

export JAVA_HOME=`/usr/libexec/java_home -v 11`

実行

シェル上で./gradlew azureFunctionsRunを実行します。少し待つと、以下のメッセージが出てきます。

Azure Functions Core Tools
Core Tools Version:       3.0.4585 Commit hash: N/A  (64-bit)
Function Runtime Version: 3.7.1.0


Functions:

        StartHelloCities: [GET] http://localhost:7071/api/StartHelloCities

        HelloCities: orchestrationTrigger

        SayHello: activityTrigger

ブラウザでhttp://localhost:7071/api/StartHelloCitiesにアクセスすると以下のような値が返ってきます(xxxxxxxxxxやyyyyyyyyyyは実行ごとによって異なります)。

{
  "id": "xxxxxxxxxx",
  "purgeHistoryDeleteUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/xxxxxxxxxx?code=yyyyyyyyyy",
  "sendEventPostUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/xxxxxxxxxx/raiseEvent/{eventName}?code=yyyyyyyyyy",
  "statusQueryGetUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/xxxxxxxxxx?code=yyyyyyyyyy",
  "terminatePostUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/xxxxxxxxxx/terminate?reason=yyyyyyyyyy"
}

ブラウザでstatusQueryGetUriで表示されたURLにアクセスすると、以下のような値が返ってきます。

{"name":"HelloCities","instanceId":"xxxxxxxxxx","runtimeStatus":"Completed","input":null,"customStatus":"","output":"Hello Tokyo!, Hello London!, Hello Seattle!","createdTime":"2022-07-03T06:20:54Z","lastUpdatedTime":"2022-07-03T06:20:56Z"}

outputの部分にてhelloCitiesOrchestratorメソッドからsayHelloメソッドを呼び出した結果が出力されていることを確認します。

なお、local.settings.jsonにて指定したAzure Storageにはコンテナーとしてazure-webjobs-hostsazure-webjobs-secretsjavatesthub-appleasejavatesthub-leasesが作成されていました。