网关介绍和作用,Spring Cloud Gateway介绍
网关是什么?
顾名思义,就是网络关口,把守网络访问的山海关,关内的人只能从山海关出去,关外的人只能从山海关进来。
A访问B,A访问C,变成A访问D,然后由D去访问B和C,那么D就是我们的网关。
本文仅对HTTP网络层面的API网关进行探讨,其他网关不在讨论范围。
网关能干什么?
一、是跨域问题的一种解决方案
如nginx的反向代理就是一个网关,可以解决不同模块单独部署之后,前端的访问路径、跨域问题。
server {
listen 8080;
server_name localhost;
location ~ /m2/ {
proxy_pass http://localhost:8081;
}
location ~ /m2/ {
proxy_pass http://localhost:8082;
}
}
插个小问题:跨域问题是怎么产生的?
一般来说,后端项目的子模块被拆分部署了,前端要调用的接口,分布在不同的ip和端口号上,从而造成了跨域问题。
二、充当防火墙的重任
网关可以统一校验用户的权限,对于权限不够的不允许访问。
三、后端可以对外提供统一的访问路径,方便调用者调用。
四、提供抽象层,方便后端重构接口。
打个比方,网关类似于,一个java的List接口,调用者只需要定义:List list
就行了,至于后端是new ArrayList
还是new LinkedList
对调用者没有影响。
Spring Cloud Gateway
介绍
Spring cloud gateway是spring官方基于Spring 5.0、Spring Boot2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供简单、有效和统一的API路由管理方式,Spring Cloud Gateway作为Spring Cloud生态系统中的网关,目标是替代Netflix Zuul,其不仅提供统一的路由方式,并且还基于Filer链的方式提供了网关基本的功能,例如:安全、监控/埋点、限流等
导入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- 服务注册 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
修改配置(基于nacos)
application.properties
# 服务端口
server.port=80
# 服务名
spring.application.name=service-gateway
# nacos服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
#使用服务发现路由
spring.cloud.gateway.discovery.locator.enabled=true
#设置路由id
spring.cloud.gateway.routes[0].id=stu
#匹配该路由的访问路径,只有调用者路径里出现/stu/的才能进入该路由。
spring.cloud.gateway.routes[0].predicates= Path=/*/stu/**
#路由的真实目的路径
spring.cloud.gateway.routes[0].uri=lb://service-stu
#设置路由id
spring.cloud.gateway.routes[1].id=tea
#匹配该路由的访问路径,只有调用者路径里出现/stu/的才能进入该路由。
spring.cloud.gateway.routes[1].predicates= Path=/*/tea/**
#路由的真实目的路径
spring.cloud.gateway.routes[1].uri=lb://service-tea
启动类
@SpringBootApplication
public class ServerGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(ServerGatewayApplication.class, args);
}
}
作者:思想永无止境
来源链接:https://blog.csdn.net/u012643122/article/details/125884346
版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。
2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。