springcloud学习笔记整理(只作为自己学习后的思路整理)

一:服务管理中心 eureka和consul

1.eureka根据pom文件添加依赖后可以使用,但是基本弃用了
2.consul需要去官网下载后使用所在文件夹内的命令行 consul agent -dev 启动,使用http://localhost:8500访问。
3.consul分为服务端和客户端,每个客户端都是一个微服务(client),client端要添加pom依赖,同时添加健康检查,否侧consul服务会认为这个client是“不健康的”,不能使用。
springcloud学习笔记整理(只作为自己学习后的思路整理)

client中要指明其服务管理中心的端口、地址、以及自身应用名称如下:
spring.application.name=users
spring.cloud.consul.port=8500
spring.cloud.consul.host=localhost

二:服务之间的信息传递

1.使用spring内置的springtemplate可以实现
RestTemplate template = new RestTemplate();
String msg=template.getForObject(http://+ 另一个微服务的ip:port+ 另一个服务的暴露端口, String.class);
但是这种方式没有做负载均衡,所以引入了ribbon (/ˈrɪbən/),
(额外:可以在bashBoard中复制一个微服务,在VM options中使用-Dserver.port=xxxx的方式)
ribbon,ribbon不需要添加pom依赖,在引入consul时就带了,ribbon有几个要掌握:
A:DiscoveryClient(不是ribbon中的),可以使用注入的方式引入,用法:
Listlist=discoveryClient.getInstances(微服务的名称即:spring.application.name)。可以获取到该微服务集群(这里指具有相同spring.application.name的服务)中的所有的服务。但是该类依然无法做负载均衡。所有有了b
B.loadBalanceClient,使用方法是:
ServiceInstance oneService = loadBalancerClient.choose(“服务名”);
string url=“http:// +oneService.getHost:oneService.getPort+”/请求的接口"
string msg= restTemlate.getForObject(url,string.Class);
它的作用是可以自动负载均衡的采用轮询的方式从给出的服务名对应的集群中取出一个服务来做这个消息的接受。结合restTemplate去调用oneSevice的接口。但是这种方式的缺点是要做ip和port的拼接,有点麻烦,所以有了c。
C:使用@loadBalanced注解,在@configration文件中配置一个restTemplate的bean,然后加上这个注解
springcloud学习笔记整理(只作为自己学习后的思路整理)使用了这个注解的restTemplate意味着这个restTemplate具有负载均衡的能力,再使用restTemplate去调用接口时不再需要指令ip和port,而是将ip和port的位置替换为要去调用的服务名称如:
string msg= restTemplate.getForObject(“http://微服务名/接口”,string.Class);
但是这种方式需要去对拼接微服务的名称和接口,当接口改变时,大量的数据要做修改。所以引入了Feign的概念。

三.Feign、OpenFeign

A.基础使用了解
openFeign在feign的基础上增加了注解的功能,
作用是伪http服务,为http请求实现负载均衡。代替了ribbon+restTemplate方式需要拼接服务名+接口的方式。
注意一:是调用端的负载均衡
注意二:添加pom文件时使用的springboot 2.2.5版本,cloud使用的是Hoxton.SR4,亲测SR6不行(只能导致1.4.x版本的openFeign,但是这个版本不支持注解,默认版本及其他版本怎么也无法导入正确的openFeign包)
springcloud学习笔记整理(只作为自己学习后的思路整理)

使用方式是:
1.需要在启动类上加上@EnableFeignClients注解,表示该应用可以使用openFeign的负载均衡。
2.创建一个interface,使用@feignClient(微服务名)表明这个接口类用于对哪个微服务集群的接口进行调用。
3.接口里面写上要调用的方法,方法声明、参数、返回值均和目标微服务的接口一致。
4.带参数的方法分为get请求和post请求,如果参数是string类型,则都要加上@requsetParam注解,如果是参数是对象类型则post方式加上@resqustBody注解,在微服务端也要加上@requstBody注解,意在将json对象转化为参数对象。
springcloud学习笔记整理(只作为自己学习后的思路整理)

springcloud学习笔记整理(只作为自己学习后的思路整理)
然后自动注入这个接口,在调用测调用这个接口接口访问 指令微服务的接口了。
B:超时问题
springcloud学习笔记整理(只作为自己学习后的思路整理)
可以在调用测的配置文件中修改如下:
springcloud学习笔记整理(只作为自己学习后的思路整理)
products是要调用的服务名称。但是如果要调用的服务数量增加会需要配置很多这样太麻烦了,所以可以全局修改,如下:
springcloud学习笔记整理(只作为自己学习后的思路整理)
C.日志调试
springcloud学习笔记整理(只作为自己学习后的思路整理)

上方是视频中的截图下方是我的工程springcloud学习笔记整理(只作为自己学习后的思路整理)

四、Hystrix

已经过时,先学习其理念
基本概念:
A.服务雪崩
springcloud学习笔记整理(只作为自己学习后的思路整理)

B,服务熔断springcloud学习笔记整理(只作为自己学习后的思路整理)
springcloud学习笔记整理(只作为自己学习后的思路整理)
3.服务降级

springcloud学习笔记整理(只作为自己学习后的思路整理)
springcloud学习笔记整理(只作为自己学习后的思路整理)

A实现服务熔断

1.pom中添加依赖
springcloud学习笔记整理(只作为自己学习后的思路整理)
2.启动可电子熔断
在启动类上添加@EnableCircuitBreaker
3.在可能抛出异常的方法上添加@HystrixCommad,参数可选用fallbackMethod后者defaultMethod两个,在该方法抛出异常时会进到对应的fallback方法中,并返回fallback方法中返回的值。调用者测会得到这个值。

B服务熔断机制
springcloud学习笔记整理(只作为自己学习后的思路整理)
C.服务降级
之后补充
**

五 gateway

springcloud学习笔记整理(只作为自己学习后的思路整理)
重点就是路由转发和过滤器
官网:gateway的描述

之后再做补充