2022年6月22日にDurable Functions for JavaがPublic previewとして公開されました。
チュートリアルがあるのでそれを試してみました。
環境
環境としては以下の通りです。
依存関係の設定
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
を設定しておく必要があります。
local.settings.json
ローカル用の設定ファイルとして、local.settings.json
を作成します。チュートリアルには書かれていませんが、Gitでのバージョン管理で誤ってコミットしてしまわないように.gitignore
にlocal.settings.json
を追加しておくと良いかと思います。
DurableFunctionsSampleクラス
チュートリアルにあるDurableFunctionsSampleクラスを実装します。チュートリアルではstartHelloCities
メソッドにてmethods
にHttpMethod.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-hosts
、azure-webjobs-secrets
、javatesthub-applease
、javatesthub-leases
が作成されていました。