SpringCloud学习笔记
学自B站狂神说
一、前言
1.学习前提
2.SpringCloud五大组件
3.常见面试题
二、微服务概述
1.什么是微服务
①微服务
②微服务架构
2.微服务优缺点
①优点
②缺点
3.微服务技术栈
4.核心四问题
三、SpringCloud入门概述
1.SpringCloud是什么?
2.SpringCloud和SpringBoot的关系
3.Dubbo 和 SpringCloud技术选型
①分布式+服务治理Dubbo
目前成熟的互联网架构,应用服务化拆分 + 消息中间件
②Dubbo 和 SpringCloud对比
最大区别:Spring Cloud 抛弃了Dubbo的RPC通信,采用的是基于HTTP的REST方式
Dubbo的定位是一款RPC框架,而SpringCloud的目标是微服务架构下的一站式解决方案。
4.SpringCloud使用步骤
①导入依赖
②编写配置文件
③开启这个功能@EnableXXXX
④编写配置类(配置bean)
四、REST服务者与消费者
①准备工作:数据库
CREATE DATABASE springcloud
CREATE TABLE db01
(
deptno
BIGINT(10) NOT NULL AUTO_INCREMENT,
dname
VARCHAR(50) NOT NULL,
db_source
VARCHAR(100) NOT NULL,
PRIMARY KEY (deptno
)
) ENGINE=INNODB DEFAULT CHARSET=utf8
NSERT INTO db01(deptno,dname,db_source) VALUES
(1,‘开发部1’,‘db01’),(2,‘开发部2’,‘db01’),
(3,‘开发部3’,‘db01’),(4,‘开发部4’,‘db01’),
(5,‘开发部5’,‘db01’),(6,‘开发部6’,‘db01’),(7,‘开发部7’,‘db01’)
②新建父工程 shan-springcloud-kuang
1.创建一个普通maven项目(不需要选择archetype);
2.添加maven依赖,由于是父工程,那么直接管理maven版本即可(引入需要的依赖)。
③新建 springcloud-api
1.创建一个普通maven项目(同上)
2.依赖(父项目已有)
3.创建一个实体类
④新建服务提供者 springcloud-provider-dept-8001
1.创建一个普通maven项目(同上)
2.依赖(父项目已有)
3.application.yml只配置端口即可
4.写Dao层、Service层、Controller层
5.手写一个启动类进行测试
⑤新建服务消费者 springcloud-consumer-dept-80
1.创建一个普通maven项目(同上)
2.依赖(父项目已有,不用写版本)
3.application.yml只配置端口即可
4.Config
5.Controller
6.手写启动类
⑥测试
先启动提供者的启动类[端口8001],然后再启动消费者的启动类[端口80]
然后打开网站
五、Eureka
1.理论知识
2.Enreka简介
3.构建步骤
打开上面服务者与消费者的例子
①新建一个module
=>springcloud-eureka-7001
②导入依赖
③编写配置文件
④编写一个启动类且启动测试
启动若遇到Type javax.xml.bind.JAXBContext not present
可以导入依赖
⑤回到springcloud-provider-dept-8001 服务提供者
进行导入依赖->编写配置文件->启动类 开启功能@Enable->测试->修改status
测试:先开启7001启动类 然后开启8001启动类 然后去7001网页
修改Status
完善监控信息,在8001 pom.xml依赖加入,然后修改配置文件
然后再进7001
4.EurEka自我保护机制:好死不如赖活
5.获取微服务消息【团队开发】
【启动7001的前提下,启动8001】
6.集群环境配置
①new Module [springcloud-eureka-7002+springcloud-eureka-7003]
②然后吧springcloud-eureka-7001的包给7002 7003导入一下
同时吧配置文件和主启动类也复制以下【记得修改端口号】
③集群
理论:
然后启动7001 7002 7003 在启动8001
六、 Ribbon:负载均衡(基于客户端-消费者)
1.什么是Ribbon?
2.Ribbon能干嘛?
3.集成Ribbon
①springcloud-consumer-dept-80[消费者]向pom.xml中添加Ribbon和Eureka依赖
②springcloud-consumer-dept-80配置文件
③主启动类加上@EnableEurekaClient注解,开启Eureka
④配置实现负载均衡
⑤修改conroller:DeptConsumerController.java
4.使用Ribbon实现负载均衡
步骤:
注意:
8001 8002 8003三个配置文件的这个application.name要一样
测试访问http://localhost/consumer/dept/list=>发现是依次有顺序的三个数据库的数据
5.如何切换或者自定义规则呢?
①springcloud-provider-dept-80模块下的ConfigBean中进行配置,切换使用不同的规则
②自定义规则
在myRule包下自定义一个配置类MyRule.java,注意:该包不要和主启动类所在的包同级,要跟启动类所在包同级
自定义的规则(这里我们参考Ribbon中默认的规则代码自己稍微改动):MyRandomRule.java
③主启动类开启负载均衡并指定自定义的MyRule配置类并测试
测试了 确实5次之后才会换结果[换一个数据库]
七、Feign:负载均衡(基于服务端)
1.简介
Feign能干什么?
2.Feign的使用步骤
①创建springcloud-consumer-fdept-feign模块
②完全拷贝springcloud-consumer-dept-80【之后进行修改,进行区分】
③导入依赖
给springcloud-consumer-fdept-feign和springcloud-api都导入依赖
④接口【springcloud-api】
⑤主启动类【springcloud-consumer-fdept-feign】
⑤修改Controller【springcloud-consumer-fdept-feign】
原先Ribbon实现
修改成Feign实现
⑥测试
启动7001 8001 8002 在启动Feign主启动类
测试成功
八、Hystrix:服务熔断
分布式系统面临的问题:杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免失败!
1.服务雪崩
2.什么是Hystrix?
3.Hystrix能干嘛?
4.服务熔断[服务端]
步骤:①新建springcloud-provider-dept-hystrix-8001模块
②拷贝springcloud-provider-dept–8001的所有内容
③导入依赖
④修改配置文件
⑤修改Controller
⑥主启动类
⑦测试
使用熔断,当访问一个不存在的id时
不使用熔断,当访问一个不存在的id时
5.服务降级[客户端]
当某一时间内服务A的访问量暴增,而B和C的访问量较少,为了缓解A服务的压力,这时候需要B和C暂时关闭一些服务功能,去承担A的部分服务,从而为A分担压力,叫做服务降级。
案例步骤:①在springcloud-api模块下的service包中新建配置类
降级配置类DeptClientServiceFallBackFactory.java
②springcloud-api模块下的service使用降级
③在springcloud-consumer-fdept-feign的配置文件开启降级
④springcloud-consumer-fdept-feign主启动类要增加扫描
⑤测试:启动7001 8001 feign[80]
6.熔断与降级区别
7.Dashboard 流监控
步骤:①新建springcloud-consumer-hystrix-dashboard模块
②导入依赖
③配置文件
④查看提供者【8001、8002、8003】是否有依赖
⑤主启动类
⑥启动主启动类,访问http://localhost:9001/hystrix
⑦springcloud-provider-dept-hystrix-8001,然后启动
⑧测试
九、Zuul路由网关
1.什么是zuul?
2.Zuul入门案例
步骤:①新建springcloud-zuul模板
②导入依赖
③配置文件
④增加一个地址
⑤主启动类,启动7001 8001 和这个9527
⑥访问http://localhost:7001/
⑦测试
访问http://www.studykuang.com:9527/springcloud-provider-dept/selectById/1
⑧修改配置文件并启动测试
访问http://www.studykuang.com:9527/mydept/selectById/1
再次修改配置文件=>让原来的失效
再次修改配置文件=>增加前缀,忽略所有微服务名字
十、Spring Cloud Config 分布式配置
1.分布式系统面临的配置文件的问题
2.分布式配置能干什么?
3.入门案例
Ⅰ:准备工作
①生成SSH公钥
新生成的这两个中
在码云的个人设置中
②从码云仓库吧东西克隆过来
然后在你要放代码的地方右键->Git Bash here
③新建一个application.yml并编写代码
④同样在Git Bash here 吧刚才新建的东西放在码云仓库上
首先需要说明你是谁
然后再去上传
Ⅱ:服务端
步骤:①新建springcloud-config-server-3344模板
②导入依赖
③配置文件
④主启动类,然后启动
⑤测试
Ⅲ:客户端
步骤:①准备工作,新建一个config.client.yml 然后上传到码云仓库
②新建一个模板springcloud-config-client
③导入依赖
④配置文件
⑤编写Controller看是否从远程仓库拿到代码
⑥主启动类,并启动测试[先启动3344,再启动这个]
启动3344,先测试3344是否成功连接远程仓库
再启动客户端,成功
4.小案例
步骤:①准备工作:新建config-dept.yml和config-eureka.yml并上传到码云仓库
②新建springcloud-config-eureka-7001模块,并将原来的springcloud-eureka-7001模块下的内容拷贝的该模块
③导入依赖
④清空配置文件,创建application.yml和bootstrap.yml配置文件
⑤启动3344再启动这个启动类,并测试
先启动3344,访问http://localhost:3344/master/config-eureka-dev.yml
后启动这个启动类,访问http://localhost:7001
⑥新建springcloud-config-dept-8001模块并拷贝springcloud-provider-dept-8001的内容
⑦导入依赖
⑧清空配置文件,创建application.yml和bootstrap.yml配置文件
⑨启动并测试
启动3344,之后访问http://localhost:3344/master/config-eureka-dev.yml
之后启动7001和这个启动类,访问访问http://localhost:7001