一.Nacos注册中心
1.运行流程:服务提供暴露接口,在注册中心进行注册,同时通过心跳检测实时的报告服务的健康状态,若服务宕机,则注册中心会将此服务剔除,同时向消费者进行通知推送。
2.nacos对微服务进行配置管理
2.1.在nocos界面的配置管理中添加配置(如:jdbc、swagger等共享的配置)
2.2.拉取共享配置代替微服务的本地配置
步骤:
二.OpenFeign远程调用
OpenFeign是一个声明式的Http客户端,其底层是基于SpringMVC
快速入门:
OpenFeign连接池:
OpenFeign的最佳实践:
将对外暴露接口的client全都封装到一个公共模块中,耦合会有一点点高。
在公共模块下扫描不到OpenFeign的client时,可以使用注解@EnableFeignClients来指定
三.SpringClould gateway 网关:
1.路由断言:也就是路由匹配规则
spring提供的12种断言方式,其中根据请求路径的最常用:
2.网关登录校验
网关过滤器有两种:
GatewayFilter:路由过滤器,作用范围灵活,作用于任意指定的路由
GlobalFilter:全局过滤器,作用范围是所有路由
自定义过滤器:
3.网关校验完用户之后,怎么从网关将用户信息传递到微服务中?
答:步将用户id存入到请求头当中,然后编写一个拦截器,截获请求头当中的用户id即可。
4.在使用Feign进行微服务之中的调用时,该怎么去传递用户信息呢?
![](https://i-blog.csdnimg.cn/blog_migrate/0ef49a4efc71d76e33ed4a6c12b00b35.png)
四.微服务雪崩
概念:微服务雪崩是指微服务调用链路中的某个服务故障,导致整个链路中的所有微服务都不可用。
解决方案:
五.服务保护
1.服务保护的方案:
1.1.请求限流(预防服务崩):限制访问接口的请求的并发量(QPS),避免服务因流量激增出现故障。
1.2.线程隔离(服务已甭):通过限定每个业务能使用的线程数量而将故障业务隔离,避免故障扩散。
1.3.服务熔断:由熔断器统计请求的异常比例或慢调用比列,如果超过阈值则熔断该业务,拦截该接口的请求。熔断期间,所有请求快速失败,全部走fallback(服务失败调用的方法)逻辑。
2.服务保护技术(Sentinel):
Sentinel是阿里巴巴开源的一款微服务流量控制组件。
Sentinel快速入门:
1.去Sentinel下载Sentinel的jar包
2.Sentinel的控制台启动命令:
java -Dserver.port=8090 -Dcsp.sentinel.dashboard.server=localhost:8090 -Dproject.name=sentinel-dashboard -jar jar包名
3.Spring整合Sentinel:
3.1添加依赖
3.2在配置文件中配置Sentinel地址
spring: main: allow-circular-references: true #允许循环依赖 cloud: sentinel: transport: dashboard: localhost:8090 #控制台地址 http-method-specify: true #开启请求方式前缀(如:get请求,post请求)
3.3 Sentinel限流规则:
在Sentinel控制台中找到簇点链路,找到要限流(流控)的请求。
3.4.线程隔离(微服务和微服务之间的)
3.5服务熔断后的Fallback
3.6 sentinel持久化(缺点:无法和控制台保持实时变化,不常用):写入nacos中,利用nacos去拉取
步骤1:引入nacos和sentinel的相关依赖
<!-- 利用nacos进行sentinel持久化--> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-datasource-nacos</artifactId> <version>版本要和本机的sentinel版本一致</version> </dependency>
步骤2:在nacos中编写配置文件
步骤3:拉取配置
六.Seata管理分布式事务
1.分布式事务概念:
2.Seate
2.1分布式事务的解决思路:各个子事务之间感知彼此的事务状态,以达到状态一致
七.RabbitMQ
1.使用场景:异步处理、应用解耦、流量控制
1.1异步调用其实就是基于消息通知,一般包含四个角色:
消息发送者:投递消息的人,就是原来的调用方
消息代理(交换机和队列):管理、暂存、转发消息
消息接收者、队列
一般是消息发送者发送消息给交换机,交换机再转发给其绑定的队列,最后由消费者去消费消息。
注意:交换机没有存储消息的能力!