微服务化宠物诊所应用

基于Spring Cloud的分布式宠物诊所示例应用,包含服务发现、配置管理、API网关等微服务核心功能,适用于云原生应用开发学习和实践。

  • by arulmsre
  • PowerShell
  • 本地部署
  • 更新于
在 GitHub 查看 arulmsre/petclinic-postgres-mcp

使用说明

使用Spring Cloud构建的Spring PetClinic示例应用程序的分布式版本

这个微服务分支最初源于 AngularJS版本 演示如何将示例Spring应用程序拆分为 微服务. 为了实现这一目标,我们使用了Spring Cloud网关、Spring Cloud断路器、Spring Cloud配置、千分尺跟踪、Resilience4j、开放遥测 以及Eureka服务发现 春云网飞 技术栈。

快速开始

使用Docker Compose在Windows上运行应用程序:

  1. 在存储库根目录中打开PowerShell。
  2. 构建Spring Boot工件:
.\mvnw.cmd clean install -DskipTests
  1. 启动整个堆栈:
docker compose up --build -d
  1. 在浏览器中打开应用程序:
http://localhost:8080
  1. 可选监控端点:
http://localhost:3010   Grafana
http://localhost:9091   Prometheus
http://localhost:8761   Eureka
  1. Grafana K8s仪表板的可选Kubernetes指标转发:
.\scripts\start-k8s-portforwards.ps1

用以下命令停止前进:

.\scripts\stop-k8s-portforwards.ps1

在没有Docker的情况下在本地启动服务

每个微服务都是一个Spring Boot应用程序,可以使用IDE在本地启动(龙目 必须设置插件)或 ../mvnw spring-boot:run 命令。请注意,支持服务(配置和发现服务器)必须在任何其他应用程序(客户、兽医、访问和API)之前启动。 启动跟踪服务器、管理服务器、Grafana和Prometheus是可选的。 如果一切顺利,您可以在指定位置访问以下服务:

  • 发现服务器-http://localhost:8761
  • 配置服务器-http://localhost:8888
  • AngularJS前端(API网关)-http://localhost:8080
  • 客户、兽医和就诊服务-随机端口,查看Eureka仪表板
  • 追踪服务器(Zipkin)-http://localhost:9411/zipkin/(我们使用 openzipkin)
  • 管理服务器(Spring Boot Admin)-http://localhost:9090
  • Grafana仪表板-http://localhost:3010
  • 普罗米修斯-http://localhost:9091

您可以使用以下命令告诉配置服务器使用本地Git存储库 native 弹簧轮廓和设置 GIT_REPO 环境变量,例如: -Dspring.profiles.active=native -DGIT_REPO=/projects/spring-petclinic-microservices-config

使用docker compose在本地启动服务

为了使用Docker启动整个基础设施,您必须通过执行以下命令来构建映像 bash ./mvnw clean install -P buildDocker 这需要 Docker 或 Docker desktop 安装和运行。

或者,您也可以在其上构建所有图像 Podman,这需要安装并运行Podman或Podman Desktop。

./mvnw clean install -PbuildDocker -Dcontainer.executable=podman

默认情况下,Docker OCI镜像是为 linux/amd64 平台。 对于其他架构,您可以使用 -Dcontainer.platform maven命令行参数。 例如,如果你的目标是苹果M2的容器映像,你可以使用命令行 linux/arm64 架构:

./mvnw clean install -P buildDocker -Dcontainer.platform="linux/arm64"

图像准备就绪后,您可以使用单个命令启动它们 docker-compose up 或 podman-compose up.

可选:启动Grafana K8s仪表板的Kubernetes度量端口转发(Windows)

如果您在本地运行此堆栈,但需要Kubernetes指标(例如 kube_* 和 container_* 面板), 在PowerShell终端中启动辅助脚本:

.\scripts\start-k8s-portforwards.ps1

这将启动预期的后台转发 prometheus.yaml:

  • localhost:8085 -> kube-state-metrics
  • localhost:8086 -> kubelet/cadvisor 端点

要阻止他们:

.\scripts\stop-k8s-portforwards.ps1

容器启动顺序与 service_healthy Docker Compose的条件 取决于 表达 和那个 健康检查 服务容器。 启动服务后,API网关需要一段时间才能与服务注册表同步, 所以不要害怕Spring Cloud Gateway的初始超时。您可以使用Eureka仪表板跟踪服务可用性 默认情况下可用http://localhost:8761.

这 main 该分支使用Eclipse Temurin和Java 17作为Docker基础映像。

注意:在MacOSX或Windows下,确保Docker VM有足够的内存来运行微服务。默认设置 通常是不够的,使 docker-compose up 缓慢得令人痛苦。

使用docker compose和Java在本地启动服务

如果您在通过docker compose运行系统时遇到问题,可以尝试运行 ./scripts/run_all.sh 该脚本将通过docker compose启动基础设施服务,并通过标准配置启动所有基于Java的应用程序 nohup java -jar ... 命令。日志将在以下网址提供 ${ROOT}/target/nameoftheapp.log.

每个基于java的应用程序都以 chaos-monkey 配置文件,以便与Spring Boot Chaos Monkey进行交互。您可以查看(README)[scripts/chaos/README.md],了解有关如何使用 ./scripts/chaos/call_chaos.sh 辅助脚本启用攻击。

了解Spring Petclinic应用程序

查看Spring Petclinic框架版本的演示文稿

一篇介绍Spring Petclinic微型设备的博客文章 (法语)

然后,您可以在此处访问宠物诊所:http://localhost:8080/

Spring Petclinic微服务架构图

如果您发现Spring Petclinic微服务的错误/建议改进

我们的问题跟踪器可以在这里找到:https://github.com/spring-petclinic/spring-petclinic-microservices/issues

数据库配置

在默认配置中,Petclinic使用内存数据库(HSQLDB),该数据库在启动时填充数据。 MySql也提供了类似的设置,以防需要持久数据库配置。 对连接器/J的依赖,MySQL JDBC驱动程序已经包含在 pom.xml 文件夹。

启动MySql数据库

您可以使用docker启动MySql数据库:

docker run -e MYSQL_ROOT_PASSWORD=petclinic -e MYSQL_DATABASE=petclinic -p 3306:3306 mysql:5.7.8

或者下载并安装MySQL数据库(例如MySQL Community Server 5.7 GA),可以在这里找到:https://dev.mysql.com/downloads/

使用Spring的“mysql”配置文件

要使用MySQL数据库,您必须启动3个微服务(visits-service, customers-service 和 vets-services) 随着 mysql 弹簧轮廓。添加 --spring.profiles.active=mysql 作为程序论证。

默认情况下,在启动时,将创建数据库模式并填充数据。 您也可以通过执行以下命令手动创建PetClinic数据库和数据 "db/mysql/{schema,data}.sql" 每3个微服务的脚本。 在 application.yml 的 配置存储库,设置 initialization-mode 到 never.

如果你使用Docker运行微服务,你必须添加 mysql 配置文件进入(Dockerfile)[docker/Dockerfile]:

ENV SPRING_PROFILES_ACTIVE docker,mysql

在 mysql section 的 application.yml 从 配置存储库,你必须改变 MySQL JDBC连接字符串的主机和端口。

自定义指标监控

Grafana和普罗米修斯被列入 docker-compose.yml 配置和面向公众的应用程序 已配备 千分尺 收集JVM和自定义业务指标。

JMeter负载测试脚本可用于对应用程序进行压力测试并生成指标: petclinic_test_plan.jmx

使用普罗米修斯

  • Prometheus可以从您的本地计算机访问,网址为http://localhost:9091

使用Grafana与普罗米修斯

  • 已设置匿名访问和Prometheus数据源。
  • A. Spring Petclinic Metrics 仪表板位于URLhttp://localhost:3010/d/69JXeR0iw/spring-petclinic指标。 您可以在此处找到JSON配置文件: docker/grafana/仪表板/grafana-petclinic-dashboard.json.
  • 您可以创建自己的仪表板或导入 千分尺/SpringBoot仪表板 通过“导入仪表板”菜单项。 此仪表板的id为 4701.

自定义指标

Spring Boot注册了许多核心指标:JVM、CPU、Tomcat、Logback。.. Spring Boot自动配置允许对Spring MVC处理的请求进行插装。 所有这三个REST控制器 OwnerResource, PetResource 和 VisitResource 已由 @Timed 班级级别的千分尺注释。

  • customers-service 应用程序启用了以下自定义指标:
    • @时间: petclinic.owner
    • @时间: petclinic.pet
  • visits-service 应用程序启用了以下自定义指标:
    • @时间: petclinic.visit

您在寻找什么特别的东西吗?

Spring Cloud组件 资源
配置服务器 配置服务器属性 和 配置存储库
服务发现 Eureka服务器 和 服务发现客户端
API网关 Spring云网关启动器 和 路由配置
Docker编写 Spring Boot with Docker指南 和 docker编写文件
断路器 Resilience4j回退方法
Grafana/Prometheus监控 千分尺实施, 弹簧靴执行器生产就绪指标
前端模块 文件
节点和NPM 前端maven插件插件在本地下载/安装Node和NPM,然后运行Bower和Gulp
鲍尔 JavaScript库由清单文件bower.json定义
咕噜 Gulp自动化的任务:缩小CSS和JS,从LESS生成CSS,复制其他静态资源
Angular JS app.js、控制器和模板

推送到Docker注册表

Docker镜像 linux/amd64 和 linux/arm64 平台已发布到DockerHub 在 春季社区 组织。 您可以提取图像:

docker pull springcommunity/spring-petclinic-config-server

您可能更喜欢构建映像,然后将映像推送到您自己的Docker注册表。

选择你的Docker注册表

你需要定义你的目标Docker注册表。 请确保您已通过运行登录 docker login <endpoint> 或 docker login 如果你只是针对Docker hub。

设置 REPOSITORY_PREFIX env变量用于定位Docker注册表。 如果你的目标是Docker hub,只需提供你的用户名,例如:

export REPOSITORY_PREFIX=springcommunity

对于其他Docker注册表,请提供存储库的完整URL,例如:

export REPOSITORY_PREFIX=harbor.myregistry.com/petclinic

推送Docker镜像 linux/amd64 和那个 linux/arm64 平台到您自己的注册表,请使用命令行:

mvn clean install -Dmaven.test.skip -P buildDocker -Ddocker.image.prefix=${REPOSITORY_PREFIX} -Dcontainer.build.extraarg="--push" -Dcontainer.platform="linux/amd64,linux/arm64"

这 scripts/pushImages.sh 和 scripts/tagImages.sh 使用以下命令构建映像后,也可以使用shell脚本 buildDocker maven配置文件。 这 scripts/tagImages.sh 需要申报 VERSION env变量。

有趣的春季宠物诊所叉子

春季宠物诊所 main 主要分支 春季项目 GitHub org是“规范”的实现,目前基于Spring Boot和Thymeleaf。

这 spring petclinic微服务 该项目是 几把叉子 托管在一个特殊的GitHub组织中: 春季宠物诊所. 如果您对不同的技术栈有特殊兴趣 这可用于实施宠物诊所,请加入那里的社区。

贡献

这 问题跟踪系统 是bug报告、功能请求和提交pull请求的首选渠道。

对于pull请求,编辑器首选项可在 编辑器配置 便于在普通文本编辑器中使用。阅读更多并下载插件 http://editorconfig.org.