上篇讲到了SpringCloud Gateway的简单使用,实现转发功能。本章主要讲到常用配置以及整合Loadbalancer。
常用配置
Gateway 基本配置route(路由)构成如下:
id:保证路由唯一;
uri:配置跳转路径,可以是具体的http资源路径、也可以是服务名。如lb://user/
,lb是loadbalancer缩写,user
是服务名,通过这段配置实现服务的负载均衡,这一点类似Nginx
的upstream
;
predicate:配置规则,官网配置如下:
filters:给下游配置请求头、响应头等。
参考SpringCloud Gateway 官网:https://docs.spring.io/spring-cloud-gateway/docs/3.0.6/reference/html/
整合Loadbalancer
服务注册者准备
准备一个服务注册者项目,如果不知道搭建可参考往期博客 Nacos服务消费和负载均衡,本文使用 user-api
服务 分别占用9001、9002端口。
本地IDEA通过如下配置,同一项目占用两个端口:
测试控制层,获取服务端口号:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserCtrl {
@Value("${server.port}")
private String port;
@GetMapping("getUser")
public String getUser(){
return "terry: " + port;
}
}
启动项目,在Nacos管理页看到实例数为2:
Gateway项目
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>
<!-- 响应式web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<!-- 负载均衡 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</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>
yml配置如下:
server:
port: 8080
spring:
application:
name: gateway
cloud:
# nacos 配置中心
nacos:
discovery:
server-addr: 127.0.0.1:8848
gateway:
discovery:
locator:
#### 开启以服务id去注册中心上获取转发地址
enabled: true
# 配置路由
routes:
# id 保证唯一
- id: csdn
# 配置跳转路径(这里以我的博客首页为例)
uri: https://blog.csdn.net/qq_37493888/
# 路由条件
predicates:
- Path=/csdn/**
- id: user
# 配置跳转路径(这里以我的博客首页为例)
uri: lb://user-api
# 路由条件
predicates:
- Path=/user/**
filters:
- StripPrefix=1
访问:http://localhost:8080/user/getUser
terry:9001,terry:9002 交替执行,如下: