今天是刘小爱自学Java的第135天。
感谢你的观看,谢谢你。
image学习内容安排如下:
昨天学了下springcloud的两个组件,今天继续学习剩下的3个组件。
当然还有其它的组件,这里就不详细学习了,暂且只学和项目中相关的即可。
注意,做一个说明:
这几天因为自身原因,导致学习状态出了点问题,故文章质量很差,后续会加紧调整状态。
一、Zuul网关
Zuul:维基百科中,它是电影《捉鬼敢死队》里的怪兽,在纽约引发了巨大骚乱。
所以在微服务中,Zuul就是守门的大Boss,其核心功能是:过滤和路由。
它是一个独立的服务,我们一步步编写。
1Zuul-Service
image①依赖导入
zuul对应的就是网关的依赖。
既然网关是一个服务,那么它也要去eureka注册,所以还需要eureka客户端的依赖。
上图中因为截图原因,我并没有截全。
②启动类上开启Zuul
在启动类上,通过@EnableZuulProxy开启网关功能,也就意味着该应用就是网关了。
看到Enable这个单词,本身就是开启的意思,也就可以想到是开启了某个功能。
2网关的配置文件
image①网关的端口
这不用多说,每个服务都要配置。
②网关的服务名称
取名为api-gateway,在注册中心显示的也就是该名称,gateway本身也是网关的意思,
③网关的路由配置
该配置可以省略不写,会自动将映射路径和服务id匹配起来,当然我们要知道它是怎么回事,画图对比说明:
image前者是通过网关访问服务,后者是通过服务直接访问,该配置就能达到这样的效果。
再次强调:该配置可以不写,会自动匹配。
④配置网关对应的注册中心
每个服务都需要去eureka注册中心注册。
3过滤器
网关是如何保护其它服务的?过滤器。
image①filterType(方法
返回值为字符串,代表过滤器的类型:
-
pre:请求在被路由之前执行,也就是上图例子中的类型。
-
routing:在路由请求时调用。
-
post:在routing和errror过滤器之后调用。
-
erro:处理请求时发生错误调用。
②filterOrder()方法
通过返回的int值来定义过滤器的执行顺序,数字越小优先级越高。
③shouldFilter()方法
返回一个Boolean值,判断该过滤器是否需要执行:返回true执行,返回false不执行。
④run()方法
过滤器的具体逻辑,我们可以自定义一个过滤器的,以后遇到具体业务会详细说明。
二、Feign
Feign,也就是伪装的意思,为什么叫伪装?
就是使用它后,就好像是在自己在处理具体的业务逻辑了,实际上是在调用别的服务。
不用我们自己拼接url,拼接参数等等操作,一切都交给Feign去做。
具体我们用一个例子来说明:
image①引入feign依赖
openfeign即开启feign的意思。
②启用feign客户端
通过@EnableFeignClients注解开启feign客户端,开启之后就可以直接使用了。
注意:feign是使用在某个服务消费方中的,它并不是一个新的服务。
image③编写一个feign客户端
-
注解@FeignClient指定要伪装的服务名。
-
和Controller层一样,使用@GetMapping说明请求路径。
-
最后说明返回值为User。
④Controller层使用feign实现调用
直接使用userClient调用feign客户端里的方法,就只需要说明一个id就好了。
我们现在再看Controller层,很难直接看出它是在调用别的服务,而是自己在处理业务,这也是它的名称“伪装”的由来。
以前我们都是在Controller层中使用url的,一眼就能看出是在远程调用。
三、Hystrix
Hystix是豪猪的意思,豪猪全身是刺,看起来就不好惹,所以Hystix是一种保护机制。
那么Hystix的作用是什么呢?具体要保护什么呢?想明白这些问题,得知道雪崩问题。
1雪崩问题
微服务中,服务间调用关系错综复杂,一个请求,可能需要调用多个微服务接口才能实现,会形成非常复杂的调用链路:
image如上图所示,当然我这算是非常简单了,实际上会复杂很多。
一次业务请求,需要调用很多个服务,此时服务B出现异常了,请求阻塞。
用户不会得到响应,那么线程一不会释放,后续越来越多的用户请求到来,越来越多的线程会阻塞。
服务器支持的线程和并发数有限,请求一直阻塞,会导致服务器资源耗尽,从而导致所有其它服务都不可用,形成雪崩效应。
Hystix解决雪崩问题的手段主要是服务降级,包括:线程隔离,服务熔断。
2注解@SpringCloudApplication
image使用该注解后,就相当于使用了:
-
@SpringBootApplication:这是一个SpringBoot应用。
-
@EnableDiscoveryClient:开启注册中心。
-
@EnableCircuitBreaker:开启熔断。
关于线程熔断问题,Hystrix这个技术已经很久没有维护了,现在主流最新的应用是使用SpringCloud阿里巴巴相关组件。
但是我这边的教程用的就是这些,我不能说和教程对着来,要学新的组件只能以后再说了。
最后
谢谢你的观看。
如果可以的话,麻烦帮忙点个赞,谢谢你。
网友评论