使用Spring Boot REST API从Dapr API访问的步骤(基础版)

使用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.47Ubuntu
$ lsb_release -a
没有可用的LSB模块。
发行商ID:Ubuntu
描述:Ubuntu 22.04.1 LTS
发布:22.04

Java JDK ※ 最小配置Java JDK的安装和Hello World!
$ java -version
openjdk版本”11.0.17″ 2022-10-18
OpenJDK运行时环境(构建11.0.17+8-post-Ubuntu-1ubuntu222.04)
OpenJDK 64位服务器虚拟机(构建11.0.17+8-post-Ubuntu-1ubuntu222.04,混合模式,共享)

Maven ※ 最小配置Maven的安装和Hello World!
$ mvn -version
Apache Maven 3.6.3
Maven主目录:/usr/share/maven
Java版本:11.0.17,供应商:Ubuntu,运行时:/usr/lib/jvm/java-11-openjdk-amd64

Docker Desktop
版本4.16.3(96739)

$ docker –version
Docker版本20.10.22,构建3a2c30b

$ docker-compose –version
Docker Compose版本v2.15.1

Dapr ※ 安装Dapr CLI的步骤
$ dapr –version
CLI版本:1.10.0
运行时版本: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

文件的内容

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

文件的内容

<?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 运行时

请确认版本
※ 建议使用 Docker 环境搭建 Dapr 运行时。
※ 请在 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-idhello-spring-daprDapr ランタイムでのアプリの識別名
※ この例ではSpring Boot 側に特に設定ファイルは必要ありませんでした。2–app-port8080Spring Boot アプリがリッスンするポート番号3–dapr-http-port3500Dapr ランタイムがリッスンするポート番号4– java -jartarget/app.jarSpring 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 REST API に Dapr API からアクセスする手順 (Docker コンテナ編) に続きます。

今後さらに Spring Boot から Dapr クライアントオブジェクトを操作する方法を学ぶ必要があります。

公式参考资料

    Dapr SDK Java