简介
网关是微服务的入口,将跨域处理、安全校验、黑白名单、过滤器、路由转发等交给网关处理,服务只需要关注业务层。这一点和Nginx很像,相当于客户端先请求网关,网关再转发到服务。
Gateway和Zuul的区别:
Gateway属于Spring团队开发。Zuul是Netflix公司的项目。
Gateway是通过SpringWebflux提供的Netty非阻塞式api,Zuul是Servlet封装的阻塞式api,性能不好。
Gateway和Nginx的区别:Gateway是Java开发方便第二次更改,Nginx第二次开发需要额外学习lua脚本。
Gateway实现转发功能
与注册中心不同的是需要去掉spring-boot-starter-web
引入spring-boot-starter-webflux
,不然会报错:Please set spring.main.web-application-type=reactive or remove spring-boot-starter-web dependency.
pom.xml配置如下
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<!--Spring Boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.2</version>
</dependency>
<!--Spring Cloud-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2020.0.5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--Spring Cloud Alibaba-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
application.yml 配置如下:
server:
port: 8080
spring:
application:
name: gateway
cloud:
# nacos 配置中心
nacos:
discovery:
server-addr: 127.0.0.1:8848
gateway:
# 配置路由
routes:
# id 保证唯一
- id: csdn
# 配置跳转路径(这里以我的博客首页为例)
uri: https://blog.csdn.net/qq_37493888/
# 路由条件
predicates:
- Path=/csdn
此时在浏览器输入:http://localhost:8080/csdn,即可跳转到csdn