专栏首页架构专栏基于 Spring Cloud 完整的微服务架构实战
原创

基于 Spring Cloud 完整的微服务架构实战

前言

本文介绍了技术栈,应用架构,体系架构,应用组件,怎么启动项目,以及相关的项目预览,介绍较为详细,详情请看下文。

一、技术栈

  • Spring boot - 微服务的入门级微框架,用来简化 Spring 应用的初始搭建以及开发过程。
  • Eureka - 云端服务发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移。
  • Spring Cloud Config - 配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储、Git 以及 Subversion。
  • Hystrix - 熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。
  • Zuul - Zuul 是在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门。
  • Spring Cloud Bus - 事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与 Spring Cloud Config 联合实现热部署。
  • Spring Cloud Sleuth - 日志收集工具包,封装了 Dapper 和 log-based 追踪以及 Zipkin 和 HTrace 操作,为 SpringCloud 应用实现了一种分布式追踪解决方案。
  • Ribbon - 提供云端负载均衡,有多种负载均衡策略可供选择,可配合服务发现和断路器使用。
  • Turbine - Turbine 是聚合服务器发送事件流数据的一个工具,用来监控集群下 hystrix 的 metrics 情况。
  • Spring Cloud Stream - Spring 数据流操作开发包,封装了与 Redis、Rabbit、Kafka 等发送接收消息。
  • Feign - Feign 是一种声明式、模板化的 HTTP 客户端。
  • Spring Cloud OAuth2 - 基于 Spring Security 和 OAuth2 的安全工具包,为你的应用程序添加安全控制。

二、应用架构

该项目包含 8 个服务

  • registry - 服务注册与发现
  • config - 外部配置
  • monitor - 监控
  • zipkin - 分布式跟踪
  • gateway - 代理所有微服务的接口网关
  • auth-service - OAuth2 认证服务
  • svca-service - 业务服务A
  • svcb-service - 业务服务B

1. 体系架构

2. 应用组件

启动项目

使用 Docker 快速启动

  1. 配置 Docker 环境
  2. mvn clean package 打包项目及 Docker 镜像
  3. 在项目根目录下执行 docker-compose up -d 启动所有项目

本地手动启动

  1. 配置 rabbitmq
  2. 修改 hosts 将主机名指向到本地,127.0.0.1 registry config monitor rabbitmq auth-service,或者修改各服务配置文件中的相应主机名为本地 ip
  3. 启动 registry、config、monitor、zipkin
  4. 启动 gateway、auth-service、svca-service、svcb-service

点击搜索微信公众号:慕容千语 持续更新技术以及行业内消息,关注后可领取小编精心准备的学习文档。

三、项目预览

1. 注册中心

访问http://localhost:8761/默认账号 user,密码 password

监控

访问http://localhost:8040/默认账号 admin,密码 admin

2. 控制面板

3. 应用注册历史

4. Turbine Hystrix面板

5. 应用信息、健康状况、垃圾回收等详情

6. 计数器

7. 查看和修改环境变量

8. 管理 Logback 日志级别

9. 查看并使用 JMX

10. 查看线程

11. 认证历史

12. 查看 Http 请求轨迹

13. Hystrix 面板

14. 链路跟踪

访问http://localhost:9411/默认账号 admin,密码 admin

15. 控制面板

16. 链路跟踪明细

17. 服务依赖关系

18. RabbitMQ 监控

Docker 启动访问 http://localhost:15673/ 默认账号 guest,密码 guest(本地 rabbit 管理系统默认端口15672)

19. 接口测试

获取 Token

curl -X POST -vu client:secret http://localhost:8060/uaa/oauth/token -H "Accept: application/json" -d "password=password&username=anil&grant_type=password&scope=read%20write"

返回如下格式数据:

{
    "access_token": "eac56504-c4f0-4706-b72e-3dc3acdf45e9",
    "token_type": "bearer",
    "refresh_token": "da1007dc-683c-4309-965d-370b15aa4aeb",
    "expires_in": 3599,
    "scope": "read write"
}

使用 access token 访问 service a 接口

curl -i -H "Authorization: Bearer eac56504-c4f0-4706-b72e-3dc3acdf45e9" http://localhost:8060/svca

返回如下数据:

svca-service (172.18.0.8:8080)===>name:zhangxd
svcb-service (172.18.0.2:8070)===>Say Hello

使用 access token 访问 service b 接口

curl -i -H "Authorization: Bearer eac56504-c4f0-4706-b72e-3dc3acdf45e9" http://localhost:8060/svcb

返回如下数据:

svcb-service (172.18.0.2:8070)===>Say Hello

使用 refresh token 刷新 token

curl -X POST -vu client:secret http://localhost:8060/uaa/oauth/token -H "Accept: application/json" -d "grant_type=refresh_token&refresh_token=da1007dc-683c-4309-965d-370b15aa4aeb"

返回更新后的 Token:

{
    "access_token": "63ff57ce-f140-482e-ba7e-b6f29df35c88",
    "token_type": "bearer",
    "refresh_token": "da1007dc-683c-4309-965d-370b15aa4aeb",
    "expires_in": 3599,
    "scope": "read write"
}

刷新配置

curl -X POST -vu user:password http://localhost:8888/bus/refresh

点击搜索微信公众号:慕容千语 持续更新技术以及行业内消息,关注后可领取小编精心准备的学习文档。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 编程实战篇——Spring Boot 自动配置实现

    基于Spring Boot自动配置的思想封装起来,使其他Spring Boot项目引入后能够进行快速配置。

    欧阳愠斐
  • 2019BATJ面试题汇总详解:MyBatis+MySQL+Spring+Redis+多线程

    如何通过HibernateDaoSupport将Spring和Hibernate结合起来?

    欧阳愠斐
  • Java后端面试这八道数据结构题你需要了解

    许多年后,这个等式仍被奉为真理。这就是为什么在面试过程中,需要考察软件工程师对数据结构的理解。

    欧阳愠斐
  • 腾讯云服务器关闭防火墙

    本文章提供windows2008,windows2012以及windows2016操作系统如何关闭防火墙的截图步骤;

    用户4049265
  • Mybatis 文档(一)

    既然有了 SqlSessionFactory,顾名思义,我们就可以从中获得 SqlSession 的实例了。SqlSession 完全包含了面向数据库执行 SQ...

    Remember_Ray
  • TKE创建的容器如何被别的vpc下云主机访问?

    此专栏是为了“补货”一些官网没有的操作文档,大家走过路过,可以留言告诉我,哪里写的不清不楚的地方,洒家给它整明白了、

    pengsiryan
  • TNW-获取微信公众号的 access_token

    TNW: TypeScript(The) + Node.js(Next) + WeChat 微信公众号开发脚手架,支持 http 模块扩展、支持任何 Node....

    Javen
  • AutoEncoder

    自编码AutoEncoder是一种无监督学习的算法,他利用反向传播算法,让目标值等于输入值。什么意思呢,下面举个例子

    mathor
  • 小程序开发

    .json 后缀的 JSON 配置文件 .wxml 后缀的 WXML 模板文件 .wxss 后缀的 WXSS 样式文件 .js 后缀的 JS 脚本逻辑文件

    达达前端
  • 浅谈laravel框架sql中groupBy之后排序的问题

    groupBy中的字段必须是select的字段,并且orderBy从句也必须是select的字段。但是如果select的字段使用聚合函数呢?抱着

    砸漏

扫码关注云+社区

领取腾讯云代金券