{"id":13535384,"url":"https://github.com/zhangxd1989/spring-boot-cloud","last_synced_at":"2025-05-15T09:07:26.369Z","repository":{"id":40499952,"uuid":"89702641","full_name":"zhangxd1989/spring-boot-cloud","owner":"zhangxd1989","description":"基于 Spring Boot、Spring Cloud、Spring Oauth2 和 Spring Cloud Netflix 等框架构建的微服务项目","archived":false,"fork":false,"pushed_at":"2023-07-18T20:51:53.000Z","size":1295,"stargazers_count":2119,"open_issues_count":21,"forks_count":1162,"subscribers_count":203,"default_branch":"master","last_synced_at":"2025-04-14T15:00:56.266Z","etag":null,"topics":["consul","eureka","feign","hystrix","oauth","ribbon","spring-boot-admin","spring-cloud","spring-cloud-sleuth","turbine","zipkin","zuul"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zhangxd1989.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-04-28T12:08:27.000Z","updated_at":"2025-04-11T06:49:20.000Z","dependencies_parsed_at":"2024-12-06T13:03:08.600Z","dependency_job_id":"7874cecc-2364-4fb2-894f-40a20283c846","html_url":"https://github.com/zhangxd1989/spring-boot-cloud","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhangxd1989%2Fspring-boot-cloud","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhangxd1989%2Fspring-boot-cloud/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhangxd1989%2Fspring-boot-cloud/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhangxd1989%2Fspring-boot-cloud/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zhangxd1989","download_url":"https://codeload.github.com/zhangxd1989/spring-boot-cloud/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254310515,"owners_count":22049469,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["consul","eureka","feign","hystrix","oauth","ribbon","spring-boot-admin","spring-cloud","spring-cloud-sleuth","turbine","zipkin","zuul"],"created_at":"2024-08-01T08:00:55.299Z","updated_at":"2025-05-15T09:07:21.350Z","avatar_url":"https://github.com/zhangxd1989.png","language":"Java","readme":"# 基于 Spring Cloud 的微服务架构\n\n本项目是一个基于 Spring Boot、Spring Cloud、Spring Oauth2 和 Spring Cloud Netflix 等框架构建的微服务项目。\n\n# 技术栈\n* Spring boot - 微服务的入门级微框架，用来简化 Spring 应用的初始搭建以及开发过程。\n* Eureka - 云端服务发现，一个基于 REST 的服务，用于定位服务，以实现云端中间层服务发现和故障转移。\n* Spring Cloud Config - 配置管理工具包，让你可以把配置放到远程服务器，集中化管理集群配置，目前支持本地存储、Git 以及 Subversion。\n* Hystrix - 熔断器，容错管理工具，旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。\n* Zuul - Zuul 是在云平台上提供动态路由，监控，弹性，安全等边缘服务的框架。Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门。\n* Spring Cloud Bus - 事件、消息总线，用于在集群（例如，配置变化事件）中传播状态变化，可与 Spring Cloud Config 联合实现热部署。\n* Spring Cloud Sleuth - 日志收集工具包，封装了 Dapper 和 log-based 追踪以及 Zipkin 和 HTrace 操作，为 SpringCloud 应用实现了一种分布式追踪解决方案。\n* Ribbon - 提供云端负载均衡，有多种负载均衡策略可供选择，可配合服务发现和断路器使用。\n* Turbine - Turbine 是聚合服务器发送事件流数据的一个工具，用来监控集群下 hystrix 的 metrics 情况。\n* Spring Cloud Stream - Spring 数据流操作开发包，封装了与 Redis、Rabbit、Kafka 等发送接收消息。\n* Feign - Feign 是一种声明式、模板化的 HTTP 客户端。\n* Spring Cloud OAuth2 - 基于 Spring Security 和 OAuth2 的安全工具包，为你的应用程序添加安全控制。\n\n# 应用架构\n\n该项目包含 8 个服务\n\n* registry - 服务注册与发现\n* config - 外部配置\n* monitor - 监控\n* zipkin - 分布式跟踪\n* gateway - 代理所有微服务的接口网关\n* auth-service - OAuth2 认证服务\n* svca-service - 业务服务A\n* svcb-service - 业务服务B\n\n## 体系架构\n![architecture](/screenshots/architecture.jpg)\n## 应用组件\n![components](/screenshots/components.jpg)\n\n# 启动项目\n\n* 使用 Docker 快速启动\n    1. 配置 Docker 环境\n    2. `mvn clean package` 打包项目及 Docker 镜像\n    3. 在项目根目录下执行 `docker-compose up -d` 启动所有项目\n* 本地手动启动\n    1. 配置 rabbitmq\n    2. 修改 hosts 将主机名指向到本地   \n       `127.0.0.1\tregistry config monitor rabbitmq auth-service`  \n       或者修改各服务配置文件中的相应主机名为本地 ip\n    3. 启动 registry、config、monitor、zipkin\n    4. 启动 gateway、auth-service、svca-service、svcb-service\n\n# 项目预览\n\n## 注册中心\n访问 http://localhost:8761/ 默认账号 user，密码 password\n\n![registry](/screenshots/registry.jpg)\n## 监控\n访问 http://localhost:8040/ 默认账号 admin，密码 admin\n### 控制面板\n![monitor](/screenshots/monitor1.jpg)\n### 应用注册历史\n![monitor](/screenshots/monitor2.jpg)\n### Turbine Hystrix面板\n![monitor](/screenshots/monitor3.jpg)\n### 应用信息、健康状况、垃圾回收等详情\n![monitor](/screenshots/monitor4.jpg)\n### 计数器\n![monitor](/screenshots/monitor5.jpg)\n### 查看和修改环境变量\n![monitor](/screenshots/monitor6.jpg)\n### 管理 Logback 日志级别\n![monitor](/screenshots/monitor7.jpg)\n### 查看并使用 JMX\n![monitor](/screenshots/monitor8.jpg)\n### 查看线程\n![monitor](/screenshots/monitor9.jpg)\n### 认证历史\n![monitor](/screenshots/monitor10.jpg)\n### 查看 Http 请求轨迹\n![monitor](/screenshots/monitor11.jpg)\n### Hystrix 面板\n![monitor](/screenshots/monitor12.jpg)\n## 链路跟踪\n访问 http://localhost:9411/ 默认账号 admin，密码 admin\n### 控制面板\n![zipkin](/screenshots/zipkin1.jpg)\n### 链路跟踪明细\n![zipkin](/screenshots/zipkin2.jpg)\n### 服务依赖关系\n![zipkin](/screenshots/zipkin3.jpg)\n## RabbitMQ 监控\nDocker 启动访问 http://localhost:15673/ 默认账号 guest，密码 guest（本地 rabbit 管理系统默认端口15672）\n\n![rabbit](/screenshots/rabbit.jpg)\n# 接口测试\n1. 获取 Token\n```\ncurl -X POST -vu client:secret http://localhost:8060/uaa/oauth/token -H \"Accept: application/json\" -d \"password=password\u0026username=anil\u0026grant_type=password\u0026scope=read%20write\"\n```\n返回如下格式数据：\n```\n{\n  \"access_token\": \"eac56504-c4f0-4706-b72e-3dc3acdf45e9\",\n  \"token_type\": \"bearer\",\n  \"refresh_token\": \"da1007dc-683c-4309-965d-370b15aa4aeb\",\n  \"expires_in\": 3599,\n  \"scope\": \"read write\"\n}\n```\n2. 使用 access token 访问 service a 接口\n```\ncurl -i -H \"Authorization: Bearer eac56504-c4f0-4706-b72e-3dc3acdf45e9\" http://localhost:8060/svca\n```\n返回如下数据：\n```\nsvca-service (172.18.0.8:8080)===\u003ename:zhangxd\nsvcb-service (172.18.0.2:8070)===\u003eSay Hello\n```\n3. 使用 access token 访问 service b 接口\n```\ncurl -i -H \"Authorization: Bearer eac56504-c4f0-4706-b72e-3dc3acdf45e9\" http://localhost:8060/svcb\n```\n返回如下数据：\n```\nsvcb-service (172.18.0.2:8070)===\u003eSay Hello\n```\n4. 使用 refresh token 刷新 token\n```\ncurl -X POST -vu client:secret http://localhost:8060/uaa/oauth/token -H \"Accept: application/json\" -d \"grant_type=refresh_token\u0026refresh_token=da1007dc-683c-4309-965d-370b15aa4aeb\"\n```\n返回更新后的 Token：\n```\n{\n  \"access_token\": \"63ff57ce-f140-482e-ba7e-b6f29df35c88\",\n  \"token_type\": \"bearer\",\n  \"refresh_token\": \"da1007dc-683c-4309-965d-370b15aa4aeb\",\n  \"expires_in\": 3599,\n  \"scope\": \"read write\"\n}\n```\n5. 刷新配置\n```\ncurl -X POST -vu user:password http://localhost:8888/bus/refresh\n```","funding_links":[],"categories":["开源"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzhangxd1989%2Fspring-boot-cloud","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzhangxd1989%2Fspring-boot-cloud","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzhangxd1989%2Fspring-boot-cloud/lists"}