0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Spring Boot REST API に Dapr API からアクセスする手順 (基本編)

Last updated at Posted at 2023-02-18

Spring Boot REST API に Dapr API からアクセスする手順 (基本編)

目的

分散アプリケーションの為のランタイム Dapr の理解を深めます。

実現すること

Ubuntu の Docker 環境で Spring Boot WEBアプリに 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 JDK の導入と Hello World!

$ java -version
openjdk version "11.0.17" 2022-10-18
OpenJDK Runtime Environment (build 11.0.17+8-post-Ubuntu-1ubuntu222.04)
OpenJDK 64-Bit Server VM (build 11.0.17+8-post-Ubuntu-1ubuntu222.04, mixed mode, sharing)

Maven ※ 最小構成 Maven の導入と Hello World!

$ mvn -version
Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 11.0.17, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64

Docker Desktop

Version 4.16.3 (96739)
$ docker --version
Docker version 20.10.22, build 3a2c30b
$ docker-compose --version
Docker Compose version v2.15.1

Dapr ※ Dapr CLI をインストールする手順

$ dapr --version
CLI version: 1.10.0
Runtime version: 1.10.0

※ この記事では基本的に Ubuntu のターミナルで操作を行います。

"Hello World" を表示する手順

Spring Boot WEBアプリの作成

プロジェクトフォルダの作成

$ cd ~
$ mkdir -p tmp/hello-spring-dapr
$ cd tmp/hello-spring-dapr

※ ~/tmp/hello-spring-dapr をプロジェクトフォルダとします。

アプリケーションクラスの作成

※ 構成を単純にする為に全ての要素を記述しています。

$ mkdir -p src/main/java/com/example/springdapr
$ vim src/main/java/com/example/springdapr/SpringbootApplication.java

ファイルの内容

SpringbootApplication.java
package com.example.springdapr;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class SpringbootApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootApplication.class, args);
    }

    @GetMapping("/hello")
    public String hello() {
        return "Hello World!";
    }
}

pom.xml の作成

$ vim pom.xml

ファイルの内容

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>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </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 install

Java アプリ起動

$ mvn spring-boot:run

コマンドで確認

$ curl -X GET http://localhost:8080/hello
Hello World!

Spring Boot アプリから "Hello World!" が取得出来ました。

※ Spring Boot アプリを一旦停止します。

Dapr ランタイムを起動

バーション確認
※ Dapr ランタイムの構築は Docker 環境をお勧めします。
※ Docker 環境で Dapr のコンテナ群が動作しているか確認して下さい。

$ dapr --version
CLI version: 1.10.0
Runtime version: 1.10.0

ランタイム起動
※ ここではアプリのプロジェクトフォルダルートで実行しています。

$ 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 アプリの "hello" API を呼び出しています。

$ curl -X GET http://localhost:3500/v1.0/invoke/hello-spring-dapr/method/hello
Hello World!

Dapr API から "Hello World!" が取得出来ました。

まとめ

  • Spring Boot アプリの REST API を Dapr API 経由で呼び出すことが出来ました。
  • この記事の例ではまだ Spring Boot 側のアプリに Dapr への依存関係はありません。
  • また実際には Spring Boot アプリをコンテナ化して Dapr コンテナと連携させる必要があります。
  • 今後さらに Spring Boot から Dapr クライアントオブジェクトを操作する方法を学ぶ必要があります。

公式リファレンス

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?