Spring-微服务
项目框架
功能模块介绍
Eureka:https://baike.baidu.com/item/Eureka/22402835?fr=aladdin
Ribbon:https://www.jianshu.com/p/1bd66db5dc46
Feign:https://www.jianshu.com/p/8c7b92b4396c
Hystrix:https://www.cnblogs.com/xiong2ge/p/hystrix_faststudy.html
Zuul:https://blog.csdn.net/admin1973/article/details/78740390
搭建服务注册中心-服务端(Eureka)
创建eureka_server项目,选中eureka Server
配置application.yml
启动类添加注解:
搭建服务注册中心-客户端
创建客户端项目,勾选Spring Web和Eureka Discovery client
配置application.yml
客户端不需要在启动类添加注解,因为添加的依赖已经完成了注册
--添加两个客户端,商品客户端和订单客户端
商品客户端:
包含了两个方法,展示所有商品和根据id查找商品
商品对象
商品信息
订单客户端:
订单对象
方法
订单终获取商品信息---见下方Ribbon实现
Ribbon:
使用:启动类终进行添加
实现类:
调用方式一:
调用方式二:
Feign:
启动类添加
订单客户端实现商品客户端(注意name一定要和商品客户端的命名一致)
方法实现类
工具类实现
如果使用了@RequestBody(product的findById),要用PostMapping,
参数用@RequestBody("id") int id来进行调用
Hystrix:
启动类添加
配置application.yml,开启熔断处理,新版本默认不开启
报警机制,在控制器中控制(降级)
熔断处理
dashboard监控仪表盘
配置文件添加
启动类添加
Zuul:
API Gateway ,是系统唯一对外的入口,介于客户端和服务端之间的中间层,处理非业务功能,提供路由请求、鉴权(是否登录等)、监控、缓存、限流等功能
启动类添加:
自定义网关名:
通过网关访问子项目:
权限过滤:(执行逻辑中没有获取到相应的参数时,显示为最后一张图)
共享RequestContext,上下文对象
Zuul过滤器(拦截器):
Zuul限流,产生令牌,如果令牌使用完了则不允许再进行访问,只允许多少人同时在线、访问等
分布式链路追踪系统Sleuth和zipkin
暂时没发现什么作用。只是单纯的控制台输出什么部分
Sleuth:
主要用于日志埋点
在相关的服务中添加依赖(商品、订单)
配置追踪信息
[order-service,96f95a0dd81fe3ab,852ef4cfcdecabf3,false]
第一个值:spring.application.name的值
第二个值:96f95a0dd81fe3ab ,sleuth生成的一个ID,叫Trace ID,用来标识一条请求链路,一条请求链路中包含一个Trace ID,多个Span ID(同流水号,串联商品和订单)
第三个值:852ef4cfcdecabf3、spanid 基本的工作单元,获取元数据,如发送一个http
第四个值:false,是否要将该信息输出到zipkin服务中来收集和展示。
Zipkin:
结合docker,启动,得到一个可视化端口,访问即可
该项需要电脑结合docker进行使用,不然展示不出来,后续开发学习可以结合视频参考。
Config
统一管理配置,,快速切换各个环境的配置
相关产品:百度的disconf、阿里的diamand
服务端:(config-server)
创建config-server项目,选中config server和eureka client
启动类添加注解
配置文件(服务名称、git存储的配置文件地址和账户信息、注册中心地址)
/{name}-{profiles}.properties
/{name}-{profiles}.yml
/{name}-{profiles}.json
/{label}/{name}-{profiles}.yml
name 服务器名称
profile 环境名称,开发、测试、生产
lable 仓库分支、默认master分支
文件是根据前缀进行匹配的,如下方路径也可以访问
不区分格式的,会进行自动转化。
注意:文件的语法问题不能出错,如果有问题,会出错
超时和分支配置
配置配置中心。Enabled是进行启用,默认不启用,profile是以什么为后缀的文件,label是分支,最好是用分支进行区分
注意:此时运行程序没有错误,但是会发现端口号访问不了,这是由于读取文件的时候出错
将项目文件application.yml改成bootstrap.yml再进行启动即可二访问,这是启动顺序的原因
Spring Cloud Bus
以商品服务为例(暂时只用于读取刷新git仓库中的配置文件)
什么是消息?一个事件,需要广播或者单独传递给某一个接口
为什么使用?配置进行更新了,但是其它系统不知道是否更新
推荐使用RabbitMQ,安装RabbitMQ
添加依赖
添加配置信息:默认已经有该值
这时什么都没有修改
需要在使用的位置添加注解
此时会发现配置中心访问文件已经进行了修改,但是项目读取还没有修改
进行刷新
此时项目读取也有了值,项目也没有重启
只要用到了git中的文件属性,并且后期需要修改,需要在类上方加注解
@RefreshScope
注意启动顺序
1、注册中心
2、配置中心(只有注册成功之后才能启动下方的服务)
3、对应的服务:商品服务、订单服务
4、网关
这时已经设置为优先读取仓库中的文件
后续还有关于微服务和docker、redis、云服务器、域名、进行打包发布的操作,由于环境原因,后续没有进行学习(第十二章往后),课程地址
http://i.xue.taobao.com/detail.htm?spm=a2174.7789578.4.3.dpAvAZ&courseId=100442