介绍
微服务是一种软件架构风格,它是以专注于单一职责的很多小型项目为基础,组合出复杂的大型应用。
Mybatis-plus
常见注解
常见配置
核心功能
条件构造器
lamda
Service接口
批量新增
Docker
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可抑制的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器完全使用沙盒机制,相互之间不会存在任何接口。几乎没有性能开销,可以很容易的在机器和数据中心运行。最重要的是,他们不依赖于任何语言、框架或者包装系统。
命令解读
数据卷
容器内修改文件不方便
自定义镜像
Dockerfile
容器网络互联
DockerComposee
项目一键部署
常用命令总结(面试)
docker ps:查看docker容器(运行之后查看是否运行成功),用于查看正在运行的容器。
docker images:于查看本地Docker服务器上的所有可用镜像。
docker logs -f 【容器名字】:查看运行日志
微服务
单体架构
高并发测试工具Jmeter
微服务架构
代价:各个服务的关系复杂化
SpringCloud(商城相关模块)
拆分
改端口号
改数据库
调试文档的接口
导入相对应的代码controller、service、mapper、domain
远程调用
一个微服务(购物车)需要商品条目的数据,因为数据库不是同一个则可以通过远程调用进行数据传输
@RequiredArgsConstructor注解作用
与@AllargsConstruct不同,@RequiredArgsConstructor注解只会对final声明的成员函数进行构造.
总结
Note:需要改进RestTemplate
存在的问题
注册中心原理
服务注册(nacos)
docker下载镜像
服务发现
OpenFeign(简化http请求)-组件1
连接池
最佳实践
方案1
方案2
依赖导入,之后重新导包
仍需要注入bean并且能扫描到:
日志
组件2-网关
入门
路由属性
网关请求处理流程
登录校验要在校验之前
如何自定义过滤器(GlobalFilter)
GateAwayFilter:一般都使用GlobalFilter就够了,有对应需求时再看
具体实现:登录校验
网关传递微服务(解决上述传递用户部分)
相关代码
步骤
配置其他配置类时,对MVC的配置类加载不需要在网关微服务模块。
需要加@ConditionalOnClass(DispatcherServlet.class)进行条件筛选
网关->过滤器(获取信息)->拦截器(提取信息)->服务
OpenFeign传递用户(用户间的微服务传递)
交易的微服务要想实现这个须在启动类上加上这个类
实现微服务间传递用户信息:
总回顾(微服务登录解决 方案 )
组件3-配置管理(Nacos)
存在的问题
重复配置过多
配置共享
配置热更新
动态路由
@PostConstruct
在bean初始化之后执行
@RequiredArgsConstructor和@Autowired
@RequiredArgsConstructor是Lombok的一个注解,简化了我们对@Autowired书写,我们在写Controller层或者Service层的时候,总是需要注入很多mapper接口或者service接口,如果每个接口都写上@Autowired,这样看起来就会很繁琐,@RequiredArgsConstructor注解可以代替@Autowired注解注意点。
注:
1、声明的变量必须加上final修饰
2、基于构造方法为属性赋值,容器通过调用类的构造方法将其进行依赖注入
@AllArgsConstructor和@RequiredArgsConstructor都可以用来替代@Autowired写法,区别在于@RequiredArgsConstructor必须要有final修饰,如果有@Value注解,@RequiredArgsConstructor修饰可以成功注入,@AllArgsConstructor修饰会注入失败
微服务问题和原因
雪崩问题
解决方案
服务保护方案-请求限流
服务保护方案 - 线程隔离
服务保护方案-服务熔断
服务保护技术
结论
服务保护技术-Sentinel
使用步骤
其中的Endpoint就是Controller层的接口
为区分多个接口,需要额外配置来将:请求路径+请求方式
请求限流(使用Jmeter进行多线程并发访问测试)
线程隔离
Fallback
服务熔断
分布式事务
RabbitMQ(异步通信组件)
同步调用
异步调用
broker:消息代理
MQ技术选型
RabbitMQ
注意事项
数据隔离
通过隔离不同用户,实现数据的隔离。
每个用户只能操作和访问自己虚拟主机的数据和消息。
java客户端(使用java实现MQ)
spring AMQP
### 步骤
接受消息(@RabbitListener)
总结
Work Queues模型
Fanout交换机
Direct交换机
Topic交换机
基于Bean声明队列交换机
基于注解声明队列交换机
解决基于Bean声明队列交换机绑定Key臃肿的问题。
消息转换器
基于MQ的业务改造
为了让springboot能扫描到相关配置类
消息可靠性
发送者可靠性
发送者重连
发送者确认
MQ可靠性
数据持久化
Lazy Queue
消费者可靠性
消费者确认机制
失败重试机制
业务幂等性
延迟消息(兜底方案)
#### 死信交换机
延迟消息插件
延迟消息–取消超时订单