使用以下步骤从 Dapr API 访问 Spring Boot REST API(容器版)

使用Spring Boot REST API从Dapr API访问的步骤(容器版本)。

为了什么

加深对适用于分散式应用程序的运行时工具Dapr的理解。

实现

本文是要实现一个在Ubuntu Docker环境中作为容器启动的Spring Boot WEB应用程序通过Dapr API进行访问的简单示例。
※ 这篇文章是关于在Spring Boot REST API中从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 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
版本 4.16.3 (96739)

$ docker –version
Docker 版本 20.10.22, build 3a2c30b

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

Dapr ※ 安装 Dapr CLI 的步骤
$ dapr –version
CLI 版本:1.10.0
运行时版本:1.10.0

※ 本文中主要使用 Ubuntu 终端进行操作。

删除 Dapr 运行时

未来将使用docker-compose启动的容器群来配置Dapr运行时。

删除运行时

$ dapr uninstall --all

确认运行时

$ dapr --version
CLI version: 1.10.0
Runtime version: n/a

※ 运行时已被删除。

展示”Hello World”的步骤

创建Spring Boot WEB应用程序

请前往项目文件夹
※ ~/tmp/hello-spring-dapr 将被用作项目文件夹。

$ cd ~/tmp/hello-spring-dapr

只需要一个选项:Java应用程序构建

建立
※ 将会创建 target/app.jar。

$ mvn clean install

Docker 镜像构建

创建Dockerfile

$ vim Dockerfile

ファイルの内容

FROM adoptopenjdk/openjdk11:jdk-11.0.11_9-alpine-slim

WORKDIR /app

COPY target/*.jar app.jar

EXPOSE 8080

ENTRYPOINT ["java","-jar","app.jar"]

建筑

$ docker build -t app-hello-spring-boot .

确认

$ docker images | grep app-hello-spring-boot
app-hello-spring-boot   latest   10c6cdc26e44   52 seconds ago   278MB

应用程序 “app-hello-spring-boot” 的镜像已创建。

创建docker-compose.yml文件

$ vim docker-compose.yml

文件的内容

version: '3'
services:
  ############################
  # Spring Boot app
  app-spring:
    image: app-hello-spring-boot
    depends_on:
      - redis
      - placement
    ports:
      - "3500:3500"
    networks:
      - hello-dapr
  ############################
  # Dapr sidecar
  app-spring-dapr:
    image: daprio/daprd:edge
    command: [
      "./daprd",
      "--app-id", "app-hello-spring",
      "--app-port", "8080",
      "--dapr-http-port", "3500",
      "--dapr-grpc-port", "50051",
      "--placement-host-address", "placement:50006",
      "--components-path", "/components"
    ]
    volumes:
      - "./components/:/components"
    depends_on:
      - app-spring
    network_mode: "service:app-spring"
  ############################
  # Dapr placement service
  placement:
    image: daprio/dapr
    command: ["./placement", "-port", "50006"]
    ports:
      - "50006:50006"
    networks:
      - hello-dapr
  ############################
  # Redis state store
  redis:
    image: redis:alpine
    ports:
      - "6380:6379"
    networks:
      - hello-dapr
networks:
    hello-dapr:

※ 注意事项:我们将 Dapr 配置为 Spring Boot 应用程序的 sidecar,并且 Spring Boot 应用程序的容器正在 3500 端口上进行监听。

在Docker环境中启动。

启动容器

$ docker-compose up -d
[+] Running 5/5
 ⠿ Network hello-spring-dapr_hello-dapr           Created
 ⠿ Container hello-spring-dapr-redis-1            Started
 ⠿ Container hello-spring-dapr-placement-1        Started
 ⠿ Container hello-spring-dapr-app-spring-1       Started
 ⠿ Container hello-spring-dapr-app-spring-dapr-1  Started

确认集装箱

$ docker ps | grep hello-spring-dapr
f78ff3dd48de   daprio/daprd:edge       "./daprd -app-id app…"                                      hello-spring-dapr-app-spring-dapr-1
1bbee3389e16   app-hello-spring-boot   "java -jar app.jar"       0.0.0.0:3500->3500/tcp, 8080/tcp   hello-spring-dapr-app-spring-1
40b98ebf6f15   redis:alpine            "docker-entrypoint.s…"   0.0.0.0:6380->6379/tcp             hello-spring-dapr-redis-1
6b02fc63b165   daprio/dapr             "./placement -port 5…"   0.0.0.0:50006->50006/tcp           hello-spring-dapr-placement-1

当检查Docker Desktop时,发现它作为容器在运行。

请确认您的请求

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

我从独立启动的Dapr API中成功获取到了“Hello World!”的内容。

总结

    • Dapr を含め、コンテナ起動した Spring Boot アプリの REST API を Dapr API 経由で呼び出すことが出来ました。

 

    • この記事の例ではまだ Spring Boot 側のアプリに Dapr への依存関係はありません。

 

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

公式参考资料

    Dapr SDK Java
广告
将在 10 秒后关闭
bannerAds