搜索引擎|SpringCloud之各种组件的学习

文章图片

文章图片

文章图片

文章图片

今天是刘小爱自学Java的第135天 。
感谢你的观看 , 谢谢你 。
学习内容安排如下:
昨天学了下springcloud的两个组件 , 今天继续学习剩下的3个组件 。
当然还有其它的组件 , 这里就不详细学习了 , 暂且只学和项目中相关的即可 。
注意 , 做一个说明:
这几天因为自身原因 , 导致学习状态出了点问题 , 故文章质量很差 , 后续会加紧调整状态 。
一、Zuul网关Zuul:维基百科中 , 它是电影《捉鬼敢死队》里的怪兽 , 在纽约引发了巨大骚乱 。
所以在微服务中 , Zuul就是守门的大Boss , 其核心功能是:过滤和路由 。
它是一个独立的服务 , 我们一步步编写 。
1Zuul-Service
①依赖导入
zuul对应的就是网关的依赖 。
既然网关是一个服务 , 那么它也要去eureka注册 , 所以还需要eureka客户端的依赖 。
上图中因为截图原因 , 我并没有截全 。
②启动类上开启Zuul
在启动类上 , 通过@EnableZuulProxy开启网关功能 , 也就意味着该应用就是网关了 。
看到Enable这个单词 , 本身就是开启的意思 , 也就可以想到是开启了某个功能 。
2网关的配置文件
①网关的端口
这不用多说 , 每个服务都要配置 。
【搜索引擎|SpringCloud之各种组件的学习】②网关的服务名称
取名为api-gateway , 在注册中心显示的也就是该名称 , gateway本身也是网关的意思 ,
③网关的路由配置
该配置可以省略不写 , 会自动将映射路径和服务id匹配起来 , 当然我们要知道它是怎么回事 , 画图对比说明:
前者是通过网关访问服务 , 后者是通过服务直接访问 , 该配置就能达到这样的效果 。
再次强调:该配置可以不写 , 会自动匹配 。
④配置网关对应的注册中心
每个服务都需要去eureka注册中心注册 。
3过滤器
网关是如何保护其它服务的?过滤器 。
①filterType(方法
返回值为字符串 , 代表过滤器的类型:
- pre:请求在被路由之前执行 , 也就是上图例子中的类型 。
- routing:在路由请求时调用 。
- post:在routing和errror过滤器之后调用 。
- erro:处理请求时发生错误调用 。
通过返回的int值来定义过滤器的执行顺序 , 数字越小优先级越高 。
③shouldFilter()方法
返回一个Boolean值 , 判断该过滤器是否需要执行:返回true执行 , 返回false不执行 。
④run()方法
过滤器的具体逻辑 , 我们可以自定义一个过滤器的 , 以后遇到具体业务会详细说明 。
二、FeignFeign , 也就是伪装的意思 , 为什么叫伪装?
就是使用它后 , 就好像是在自己在处理具体的业务逻辑了 , 实际上是在调用别的服务 。
不用我们自己拼接url , 拼接参数等等操作 , 一切都交给Feign去做 。
具体我们用一个例子来说明:
①引入feign依赖
openfeign即开启feign的意思 。
②启用feign客户端
通过@EnableFeignClients注解开启feign客户端 , 开启之后就可以直接使用了 。
注意:feign是使用在某个服务消费方中的 , 它并不是一个新的服务 。
③编写一个feign客户端
- 注解@FeignClient指定要伪装的服务名 。
- 和Controller层一样 , 使用@GetMapping说明请求路径 。
- 最后说明返回值为User 。
直接使用userClient调用feign客户端里的方法 , 就只需要说明一个id就好了 。
我们现在再看Controller层 , 很难直接看出它是在调用别的服务 , 而是自己在处理业务 , 这也是它的名称“伪装”的由来 。
以前我们都是在Controller层中使用url的 , 一眼就能看出是在远程调用 。
三、HystrixHystix是豪猪的意思 , 豪猪全身是刺 , 看起来就不好惹 , 所以Hystix是一种保护机制 。
那么Hystix的作用是什么呢?具体要保护什么呢?想明白这些问题 , 得知道雪崩问题 。
1雪崩问题
微服务中 , 服务间调用关系错综复杂 , 一个请求 , 可能需要调用多个微服务接口才能实现 , 会形成非常复杂的调用链路:
如上图所示 , 当然我这算是非常简单了 , 实际上会复杂很多 。
一次业务请求 , 需要调用很多个服务 , 此时服务B出现异常了 , 请求阻塞 。
用户不会得到响应 , 那么线程一不会释放 , 后续越来越多的用户请求到来 , 越来越多的线程会阻塞 。
服务器支持的线程和并发数有限 , 请求一直阻塞 , 会导致服务器资源耗尽 , 从而导致所有其它服务都不可用 , 形成雪崩效应 。
Hystix解决雪崩问题的手段主要是服务降级 , 包括:线程隔离 , 服务熔断 。
2注解@SpringCloudApplication
使用该注解后 , 就相当于使用了:
- @SpringBootApplication:这是一个SpringBoot应用 。
- @EnableDiscoveryClient:开启注册中心 。
- @EnableCircuitBreaker:开启熔断 。
但是我这边的教程用的就是这些 , 我不能说和教程对着来 , 要学新的组件只能以后再说了 。
最后谢谢你的观看 。
如果可以的话 , 麻烦帮忙点个赞 , 谢谢你 。
推荐阅读
- 埃隆·马斯克|马斯克薛其坤对谈:火星地球各有生存之道
- 它,有“蔬菜之王”的美称,炒一炒就出锅,清爽可口,好吃不胖
- 菜籽饼|菜籽饼被誉为果园之宝,但用错了烧苗烧根,果农如何来使用?
- 冰岛|数万次地震之后 冰岛一火山爆发
- 春天吃饺子,韭菜荠菜靠边站,用这菜做馅,一年之中现在最好吃
- 火星|火星水的“消失”之谜解开?或有多达99%如今藏在火星地壳中
- 抑郁症|育儿博主之子因抑郁症身亡,精神崩塌后的父亲和妈妈粉有何风险?
- 肝纤维化|肝纤维化诊断共识解读(二)
- 家里的主厨要注意:4种蔬菜吃之前一定要焯水,避免食物中毒
- 人工角膜|每70人只有一人等到捐献角膜!国产人工角膜来了!价格是进口十分之一
