您现在的位置: 首页 > 品质厨房 > 厨房小件 >

【微服务】135:SpringCloud组件

lovgou.com  来源:全球乐购 日期:2020-08-25 22:07:25

谢谢你的寓目,谢谢你。

学习内容摆设如下:

昨天学了下springcloud的两个组件,今天继续学习剩下的3个组件。

固然另有其它的组件,这里就不详细学习了,暂且只学和项目中相关的即可。

注意,做一个说明:

这几天因为自身原因,导致学习状态出了点问题,故文章质量很差,后续会加紧调整状态。

一、Zuul网关

Zuul:维基百科中,它是影戏《捉鬼敢死队》里的怪兽,在纽约引发了庞大骚乱。

所以在微服务中,Zuul就是守门的大Boss,其焦点功效是:过滤和路由。

它是一个独立的服务,我们一步步编写。

1Zuul-Service

依赖导入

zuul对应的就是网关的依赖。

既然网关是一个服务,那么它也要去eureka注册,所以还需要eureka客户端的依赖。

上图中因为截图原因,我并没有截全。

启动类上开启Zuul

在启动类上,通过@EnableZuulProxy开启网关功效,也就意味着该应用就是网关了。

看到Enable这个单词,自己就是开启的意思,也就可以想到是开启了某个功效。

2网关的设置文件

网关的端口

这不用多说,每个服务都要设置。

网关的服务名称

取名为api-gateway,在注册中心显示的也就是该名称,gateway自己也是网关的意思,

网关的路由设置

该设置可以省略不写,会自动将映射路径和服务id匹配起来,固然我们要知道它是怎么回事,绘图对比说明:

前者是通过网关会见服务,后者是通过服务直接会见,该设置就能到达这样的效果。

再次强调:该设置可以不写,会自动匹配。

设置网关对应的注册中心

每个服务都需要去eureka注册中心注册。

3过滤器

网关是如何掩护其它服务的?过滤器。

filterType(方法

返回值为字符串,代表过滤器的类型:

pre:请求在被路由之前执行,也就是上图例子中的类型。

routing:在路由请求时挪用。

post:在routing和errror过滤器之后挪用。

erro:处置惩罚请求时发生错误挪用。

filterOrder()方法

通过返回的int值来界说过滤器的执行顺序,数字越小优先级越高。

shouldFilter()方法

返回一个Boolean值,判断该过滤器是否需要执行:返回true执行,返回false不执行。

run()方法

过滤器的详细逻辑,我们可以自界说一个过滤器的,以后遇到详细业务会详细说明。

二、Feign

Feign,也就是伪装的意思,为什么叫伪装?

就是使用它后,就似乎是在自己在处置惩罚详细的业务逻辑了,实际上是在挪用此外服务。

不用我们自己拼接url,拼接参数等等操作,一切都交给Feign去做。

详细我们用一个例子来说明:

引入feign依赖

openfeign即开启feign的意思。

启用feign客户端

通过@EnableFeignClients注解开启feign客户端,开启之后就可以直接使用了。

注意:feign是使用在某个服务消费方中的,它并不是一个新的服务。

编写一个feign客户端

注解@FeignClient指定要伪装的服务名。

和Controller层一样,使用@GetMapping说明请求路径。

最后说明返回值为User。

Controller层使用feign实现挪用

直接使用userClient挪用feign客户端里的方法,就只需要说明一个id就好了。

我们现在再看Controller层,很难直接看出它是在挪用此外服务,而是自己在处置惩罚业务,这也是它的名称“伪装”的由来。

以前我们都是在Controller层中使用url的,一眼就能看出是在远程挪用。

三、Hystrix

Hystix是豪猪的意思,豪猪全身是刺,看起来就欠好惹,所以Hystix是一种掩护机制。

那么Hystix的作用是什么呢?详细要掩护什么呢?想明确这些问题,得知道雪崩问题。

1雪崩问题

微服务中,服务间挪用关系错综庞大,一个请求,可能需要挪用多个微服务接谈锋能实现,会形成很是庞大的挪用链路:

如上图所示,固然我这算是很是简朴了,实际上会庞大许多。

一次业务请求,需要挪用许多个服务,此时服务B泛起异常了,请求阻塞。

用户不会获得响应,那么线程一不会释放,后续越来越多的用户请求到来,越来越多的线程会阻塞。

服务器支持的线程和并发数有限,请求一直阻塞,会导致服务器资源耗尽,从而导致所有其它服务都不行用,形成雪崩效应。

Hystix解决雪崩问题的手段主要是服务降级,包罗:线程隔离,服务熔断。

2注解@SpringCloudApplication

使用该注解后,就相当于使用了:

@SpringBootApplication:这是一个SpringBoot应用。

@EnableDiscoveryClient:开启注册中心。

@EnableCircuitBreaker:开启熔断。

关于线程熔断问题,Hystrix这个技术已经良久没有维护了,现在主流最新的应用是使用SpringCloud阿里巴巴相关组件。

可是我这边的教程用的就是这些,我不能说和教程对着来,要学新的组件只能以后再说了。

最后

谢谢你的寓目。

如果可以的话,贫苦帮助点个赞,谢谢你。

>>下篇:返回列表