路由转发 + 执行过滤器链。
网关,旨在为微服务架构提供一种简单有效的统一的API路由管理方式。同时,基于Filter链的方式提供了网关的基本功能,比如:鉴权、流量控制、熔断、路径重写、黑白名单、日志监控等。
基本功能如下:
路由(Route):由一个ID,一个目标URI(最终路由到的url地址),一组断言(匹配条件判断)和一组过滤器定义。如果断言为真,则路由匹配。
断言(Predicate):通过断言匹配http请求中的任何内容(请求头、请求参数等),如果匹配成功,则匹配断言所在路由。
过滤器(Filter):在请求前后执行业务逻辑,比如鉴权、日志监控、流量控制、修改请求头、修改响应等。
spring:
cloud:
gateway:
routes:
- id: manager # 路由唯一标识
uri: lb://manager_server # 路由指向目的地URL或服务名,客户端请求最终被转发到的微服务
predicates:
- Path=/manager/** # 断言:以manager开头的请求都负载到manager_server服务
filters:
- RewritePath=/manager/(?>.*), /$\{segment} # 过滤器:过滤掉url里的manager,例如http://ip:port/manager/test -> http://ip:port/test
order: 5 # 用于多个Route之间的排序,数值越小越靠前,匹配优先级越高
<properties>
<maven.compiler.source>8maven.compiler.source>
<maven.compiler.target>8maven.compiler.target>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<dubbo.version>3.2.0-beta.4dubbo.version>
<spring-boot.version>2.6.11spring-boot.version>
properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
<version>${spring-boot.version}version>
<type>pomtype>
<scope>importscope>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-alibaba-dependenciesartifactId>
<version>2021.0.4.0version>
<type>pomtype>
<scope>importscope>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
<version>2021.0.4.0version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
dependencies>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-gatewayartifactId>
<version>3.1.2version>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-loadbalancerartifactId>
<version>3.1.1version>
dependency>
dependencies>
server:
port: 9002
spring:
application:
name: SpringBoot-Nacos-Dubbo-provider #Nacos注册中心服务名称
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 #Nacos注册中心地址
服务提供者2复制修改端口即可
server:
port: 8080
spring:
application:
name: gateway
cloud:
nacos:
discovery:
server-addr: localhost:8848 #注册到nacos中
gateway:
routes:
- id: gateway1 #路由的ID,没有固定规则但要求唯一,建议配合服务名
uri: http://localhost:9002 #匹配后提供服务的路由地址
predicates:
- Path=/provider/** # 断言,路径相匹配的进行路由
@RestController
@RequestMapping("/provider")
public class ProviderController {
@Value("${server.port}")
private String post;
@GetMapping("/getpost")
public String getPost(){
return "当前端口:"+post;
}
}
启动服务提供者9002 浏览器访问localhost:8080/provider/getpost
负载均衡
传统模式
gateway
server:
port: 8080
spring:
application:
name: gateway
cloud:
nacos:
discovery:
server-addr: localhost:8848 #注册到nacos中
gateway:
discovery:
locator:
enabled: true #开启从注册中心动态创建路由的功能,利用微服务名进行路由
routes:
- id: gateway1 #路由的ID,没有固定规则但要求唯一,建议配合服务名
uri: lb://SpringBoot-Nacos-Dubbo-provider #匹配后提供服务的名称 用于负载均衡
predicates:
- Path=/provider/** # 断言,路径相匹配的进行路由
分别启动服务提供者9002、9001 浏览器访问localhost:8080/provider/getpost 实现负载均衡