一)pom配置
这边需要提醒的一点就是,因为采用了注册中心为阿里的,所以我们这里采用的机制都是SpringCloud Alibaba的框架
其实用什么框架不主要,最主要知道Gateway的基本原理就行了,换框架也影响不大。
二)application配置文件
![(https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL0ZJV0wwM1ZBMTJRVnFmeEMucG5nIXRodW1ibmFpbA?x-oss-process=image/format,png)
nacos.discovery.server-addr指向Nacos注册中心
三)Application启动
注解 @EnableDiscoveryClient
四)Controller
两个接口微服务
启动工程后,访问Nacos管理控制台
goods-provider注册成功。
微服务消费者
在增加个消费者,也就是调用接口方。POM配置和提供者一样
一)application配置文件
nacos.discovery.server-addr指向Nacos注册中心
二)Application启动
注解@EnableDiscoveryClient
三)Configuration
创建一个名为 NacosConsumerConfiguration 的 Java 配置类,主要作用是为了注入 RestTemplate
四)Controller
采用RestTemplate调用方式,这边还故意增加了获取ip和端口的;因为我们会启动多个消费者,端口9091和9092。
**查看控制台,**实例数为2,说明消费者由2个实例
微服务网关
我们主角出现了,看看怎么弄
一)POM
二)application配置文件
注意gateway:discovery:locator:enabled:true这样就可以利用微服务名进行路由
因为消费者我们启动多个实例,不可能我们人工指定去请求哪个IP的消费者,应该是由框架去解决,框架中实现负载均衡,可以按照不同的负载均衡算法进行路由。
三)Application启动
启动查看Nacos控制台
整个工程设置结束,看看效果,访问
http://localhost:8080/goods-consumer/echo/app/name
返回
在刷新
端口9091和9092依次显示,我们发现就是依次调用了2个微服务消费者实例接口。不过我们发现在请求的URL地址中,把服务名暴露出来了goods-consumer,有点变扭。
是不是可以不需要输入微服务名称呢?当然可以,我们修改一下配置文件
在路由配置中采用lb://goods-consumer方式表明使用微服务名进行路由
访问
http://localhost:8080/echo/app/name
多次刷新,效果一样;不过这样的URL,就舒服多了。
上面介绍了结合注册中心,Gateway如何路由到微服务接口
Filter过滤器
Spring Cloud Gateway的Filter的生命周期不像Zuul的那么丰富,它只有两个:“pre” 和 “post”。
PRE: 这种过滤器在请求被路由之前调用。我们可利用这种过滤器实现身份验证、记录调试信息等。
POST:这种过滤器在路由到微服务以后执行。这种过滤器可用来为响应添加标准的 HTTP Header、收集统计信息和指标、将响应从微服务发送给客户端等。
Spring Cloud Gateway的Filter分为两种:GatewayFilter 与 GlobalFilter。
GlobalFilter会应用到所有的路由上,而GatewayFilter将应用到单个路由或者一个分组的路由上。
Spring Cloud Gateway内置了9种 GlobalFilter,比如 Netty Routing Filter、LoadBalancerClient Filter、Websocket Routing Filter 等。
根据名字即可猜测出这些Filter的作用,具体大家可以参考官网
Gateway filter
过滤器允许以某种方式修改传入的HTTP请求或传出的HTTP响应。过滤器的作用域为特定路由。Spring Cloud Gateway包含许多内置的GatewayFilter工厂。
官方文档中都给出来这些过滤器的用法,在这里老顾只介绍2个案例。
1、AddRequestHeader GatewayFilter Factory
过滤器工厂会在匹配的请求头加上一对请求头,名称为X-Request-Goods,值为third。
2、RewritePath GatewayFilter Factory
在Nginx服务启中有一个非常强大的功能就是重写路径,Spring Cloud Gateway默认也提供了这样的功能,这个功能是Zuul没有
所有的/foo/**开始的路径都会命中配置的router。
请求http://localhost:8080/foo/echo/app/name会转到http://localhost:8080/echo/app/name,结果如下
自定义GatewayFilter
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
本次面试答案,以及收集到的大厂必问面试题分享:
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!
71093)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!