Dapr API から Spring Boot REST API にアクセスする (シンプル編)
こんにちは、@studio_meowtoon です。今回は、WSL Ubuntu 22.04 で Dapr ランタイムと Spring Boot アプリを連携する方法を紹介します。
目的
分散アプリケーションの為のランタイム Dapr の理解を深めます。
実現すること
Ubuntu の Docker 環境で Spring Boot アプリに Dapr API からアクセスするシンプルな例を実装します。
開発環境
- Windows 11 Home 22H2 を使用しています。
WSL の Ubuntu を操作していきますので macOS の方も参考にして頂けます。
WSL (Microsoft Store アプリ版) ※ こちらの関連記事からインストール方法をご確認いただけます
> wsl --version
WSL バージョン: 1.0.3.0
カーネル バージョン: 5.15.79.1
WSLg バージョン: 1.0.47
Ubuntu ※ こちらの関連記事からインストール方法をご確認いただけます
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.1 LTS
Release: 22.04
Java JDK ※ こちらの関連記事からインストール方法をご確認いただけます
$ java -version
openjdk version "11.0.18" 2023-01-17
OpenJDK Runtime Environment (build 11.0.18+10-post-Ubuntu-0ubuntu122.04)
OpenJDK 64-Bit Server VM (build 11.0.18+10-post-Ubuntu-0ubuntu122.04, mixed mode, sharing)
Maven ※ こちらの関連記事からインストール方法をご確認いただけます
$ mvn -version
Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 11.0.18, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
Docker ※ こちらの関連記事からインストール方法をご確認いただけます
$ docker --version
Docker version 23.0.1, build a5ee5b1
Dapr ※ こちらの関連記事からインストール方法をご確認いただけます
$ dapr --version
CLI version: 1.11.0
Runtime version: 1.11.2
※ この記事では基本的に Ubuntu のターミナルで操作を行います。
作成する Web アプリケーションの仕様
No | エンドポイント | HTTPメソッド | MIME タイプ |
---|---|---|---|
1 | /api/data | GET | application/json |
説明を開きます。
/api/data というエンドポイントに対して HTTP GET リクエストを送信すると、JSON データがレスポンスされるシンプルな Web サービスを実装します。
Hello World を表示する手順
Spring Boot アプリの作成
こちらの関連記事からご確認いただけます。
プロジェクトフォルダの作成
プロジェクトフォルダを作成します。
※ ~/tmp/hello-spring-dapr をプロジェクトフォルダとします。
$ mkdir -p ~/tmp/hello-spring-dapr
$ cd ~/tmp/hello-spring-dapr
アプリケーションクラスの作成
構成を単純にする為に全ての要素を記述しています。
$ mkdir -p src/main/java/com/example/springdapr
$ vim src/main/java/com/example/springdapr/Application.java
ファイルの内容
package com.example.springdapr;
import java.util.Map;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
@RequestMapping("/api")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@GetMapping("/data")
public Map<String, String> getData() {
Map<String, String> map = Map.of("message", "Hello World!");
return map;
}
}
pom.xml の作成
$ vim pom.xml
ファイルの内容
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.8</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>hello-spring-dapr</artifactId>
<version>1.0</version>
<name>hello-spring-dapr</name>
<properties>
<java.version>11</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<finalName>app</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Spring Boot アプリだけで実行する
Java アプリをビルドします。
$ mvn clean package
アプリを起動します。
※ アプリを停止するときは ctrl + C を押します。
$ mvn spring-boot:run
別ターミナルからコマンドで確認します。
$ curl http://localhost:8080/api/data -w '\n'
出力
{"message":"Hello World!"}
ここまでの手順で、ターミナルに {"message":"Hello World!"} と表示され、JSON データを取得することが出来ました。
ここで、Spring Boot アプリを一旦停止します。
Dapr ランタイムを起動
Dapr ランタイムについては前回の記事でご確認いただけます。
Dapr バーション確認
$ dapr --version
CLI version: 1.11.0
Runtime version: 1.11.2
Dapr ランタイム起動
ここでは Spring Boot アプリのプロジェクトフォルダルートで実行しています。
この記事の例では、Dapr ランタイムが Docker で動作しています。この場合、Docker サービスの起動が必要です。
$ dapr run \
--app-id hello-spring-dapr \
--app-port 8080 \
--dapr-http-port 3500 \
-- java -jar target/app.jar
No | オプション | 値 | 説明 |
---|---|---|---|
1 | --app-id | hello-spring-dapr | Dapr ランタイムでのアプリの識別名 ※ この例ではSpring Boot 側に特に設定ファイルは必要ありません。 |
2 | --app-port | 8080 | Spring Boot アプリがリッスンするポート番号 |
3 | --dapr-http-port | 3500 | Dapr ランタイムがリッスンするポート番号 |
4 | -- java -jar | target/app.jar | Spring Boot アプリの jar ファイルを同時に実行します。 |
Dapr API から Spring Boot アプリにアクセスする
別ターミナルからリクエストします。
Spring Boot アプリの api/data エンドポイントを呼び出しています。
$ curl http://localhost:3500/v1.0/invoke/hello-spring-dapr/method/api/data -w '\n'
出力
{"message":"Hello World!"}
Dapr API から "Hello World!" が取得出来ました。
ここまでの手順で、Dapr ランタイム経由で Spring Boot アプリを起動し、 Dapr API から JSON データを取得することが出来ました。
まとめ
- Spring Boot アプリの REST API を Dapr API 経由で呼び出すことが出来ました。
- この記事の例ではまだ Spring Boot 側のアプリに Dapr への依存関係はありません。
- 今後さらに Spring Boot から Dapr クライアントオブジェクトを操作する方法を学ぶ必要があります。
どうでしたか? WSL Ubuntu で Dapr ランタイムを使用した開発環境が手軽に構築できます。ぜひお試しください。今後も Ubuntu の開発環境などを紹介していきますので、ぜひお楽しみにしてください。
推奨コンテンツ