一、前言
微服务 包含的东西 不只是 springcloud,springcloud只是解决了微服务的服务治理问题,对于微服务的其他问题并没有给出解决方案。
二、认识微服务
1.)单体架构和分布式架构的区别?
2.)什么是微服务?
微服务是分布式架构的最佳实践。
3.)三种微服务技术的对比?
4.)为什么springcloud能成为国内最广泛的微服务框架?
5.)springcloud与springboot的版本关系?
三、服务的拆分及远程调用
1.)服务拆分注意事项
2.)利用RestTemplate进行远程调用
1.)没有远程调用的情况
2.)向spring容器 中注入 RestTemplate
3.)利用RestTemplate 发送 HTTP请求,实现远程调用
4.)结果
四、Eureka的作用以及具体实现
1.)直接在代码中 使用 IP和端口的 问题
2.)Eureka的作用
3.)Eureka中,两种微服务角色 :
4.)Eureka注册中心 动手实践
1.)搭建注册中心
新建模块 引入服务端依赖:
编写启动类并注意加上相关注解
启动 查看
2.)服务注册
引入 客户端 依赖
添加 配置信息
模拟多实例部署
3.)服务发现
使用服务名称 代替 ip和端口
添加负载均衡注解
4.)启动,查看
5.)todo (Ribbon负载均衡)
1.负载均衡源码解读
使用@LoadBalanced注解进行负载均衡时,实际上是通过Ribbon实现负载均衡
2.改变负载均衡策略
3.饥饿加载
五、Nacos注册中心
1.)安装和认识Nacos
安装包和安装指南在百度网盘。
注意:
以非集群的形式启动Nacos时,应该以如下方式启动:
进入bin目录,执行以下命令:
startup.cmd -m standalone
访问:
http://127.0.0.1:8848/nacos
密码:nacos 账号:nacos
2.)Nacos的快速入门
①引入依赖
②在yml文件中配置Nacos地址
③浏览器访问控制台可见服务已经被注册
3.)Nacos分级存储模型
当本集群中的服务不可访问时,再访问其他集群。
配置服务所属集群
4.)服务负载均衡
1.根据服务负载均衡
2.根据权重负载均衡
在Nacos控制台,编辑实例的权重
3.Nacos环境隔离
Nacos通过namespace进行环境隔离
①在Nacos控制台新建namespace
②每一个namespace都有一个唯一的namespaceid,在yml文件中配置每个服务所属的namespace。
六、Eureka和Nacos的区别
1.服务健康监测不同
Nacos的实例可以分为:临时实例 和 非临时实例
临时实例宕机时,会从naocs的服务列表中剔出,非临时实例不会。
心跳模式:在每一个Eureka Client启动的时候,都会有一个HeartbeatThread的心跳线程,这个就是一个后跳线程,保证默认30秒的时候向Eureka Server发送一个信息的请求,告诉Eureka Server当前的Eureka Client还存活着。eureka.instance.lease-renewal-interval-in-seconds,这个参数可以来配置对应的心跳间隔时间。
Eureka的健康检测为心跳模式
Nacos的临时实例的健康监测为心跳模式
Nacos的非临时实例的建康监测为naocs主动询问
2.消费者的服务列表更新方式不同
Eureka:定时拉取
Nacos:定时拉取+主动推送变更消息
3.Nacos集群采用的模式不同
Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式
Eureka采用AP方式
七、Nacos配置管理
Naocs不仅可以作为注册中心,还可以进行统一配置管理
1.)实操
①在Nacos控制台中增加配置
②项目启动时,读取配置文件的顺序
③引入Nacos配置管理的相关依赖
④创建bootstrap.yml文件
注意将application.yml文件中的重复配置删除掉
⑤编写接口
2.)配置自动刷新
直接在Nacos控制台上编辑配置文件即可,不用重启服务。
①在@value注入的变量所在类上加@RefreshScope
②使用@ConfigurationProperties注解
3.)多环境配置共享
4.)多服务配置共享
5.)Nacos集群搭建(按文档搭建即可)
我们计划的集群结构:
1.初始化数据库
Nacos默认数据存储在内嵌数据库Derby中,不属于生产可用的数据库。
官方推荐的最佳实践是使用带有主从的高可用数据库集群,主从模式的高可用数据库可以参考传智教育的后续高手课程。
这里我们以单点的数据库为例来讲解
2.下载nacos
nacos在GitHub上有下载地址:https://github.com/alibaba/nacos/tags,可以选择任意版本下载
3.配置nacos
注意,Nacos的安装目录一定不能有中文,如果有中文的话,就会报错。
4.启动
5.nginx反向代理
八、使用Fegin远程调用
1.)使用RestTemplate的缺点
真实企业开发时,请求的路径的参数会比较复杂且多变,如果使用RestTemplate,代码可读性差、修改不方便。
2.)Fegin入门
1.引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.在springboot启动类上开启Fegin
3.创建Fegin接口
3.)Fegin的自定义配置
1.配置文件方式
2.java代码方式
4.)性能优化
1.修改Fegin底层的默认客户端:使其支持连接池
①引入httpclient依赖
<!--httpclient-->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
②修改配置文件
2.修改日志级别为BASIC
5.)Fegin的最佳实践
1.让原来服务提供者(userservice)的controller和服务消费者(orderservice)的Feginclient继承同一接口
2.将FeginClient、POJO、Fegin的默认配置都定义到一个项目中,供所有消费者使用
1.创建一个module,引入依赖
2.将orderservice中的部分文件转移到feign-api
3.在orederservice中引入fegin-api的依赖,并在代码中引入
这里可能会出现,order-service中不能用feign-api的问题
点击这里解决
4.在启动类上加上如下属性,将UserClient加入到Bean容器中
九、统一网关Gateway
1.)为什么需要网关?
2.)快速入门
1.创建新的module,并引入以下依赖:
<!--网关依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--naocs服务发现依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.编写启动类
3.编写配置文件
3.)路由断言工厂
4.)路由过滤器
1. 路由过滤器的作用?
对进入网关的请求和微服务发回的响应做处理。
2.实操
单一路由生效
全路由生效
5.)全局过滤器
炸一听,全局过滤器和上面的默认过滤器相似,他们的不同点就是:
全局过滤器可以自定义一些复杂的逻辑,而默认过滤器已经被spring写死。
6.)过滤器的执行顺序
1.order值越小,越先执行
2.order值一样,defaultfilter>局部路由过滤器>全局过滤器
7.)跨域问题处理
十、Docker
1.)Docker的一些概念:
镜像和容器?
镜像:将应用程序及其依赖、环境、配置打包在一起。
容器:镜像运行起来就是容器,一个镜像可以运行多个容器。
各个容器之间是隔离的,防止污染容器。
镜像的结构?
服务端:接受命令或远程请求,操作镜像或容器
客户端: 发送命令或者请求到Docker服务端
2.)常用镜像命令
1.查看帮助:docker --help
2.拉取镜像 : docker pull xxxxx
3.将镜像save到磁盘,然后load回来:
3.)常用的容器命令
1.创建一个容器
应该去docker hub查看某个容器的启动命令:
Docker Hub
2.进入容器 修改一些东西
3.删除容器
4.)数据卷
1.容器和数据耦合所带来的一些问题:
容器与数据的耦合所带来的一些问题:
2.用数据卷来解决容器和数据耦合的问题
数据卷是一个虚拟目录,指向宿主机文件系统的某个目录。
3.关于数据卷的基本操作:
4.将数据卷挂载到容器当中
5.将宿主机目录直接挂载到容器当中
6.数据卷挂载和目录挂载的区别?
数据卷挂载 :数据存放在docker给我们准备的目录下
目录挂载:数据存放在我们想要存放的目录 ,
5.)自定义镜像
1.进入目录,通过Xftp将所需要的文件传输过来
2.执行命令:
6.)DockerCompose
Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而不用手动的一个一个创建。