基本步骤如下:
-
创建SpringBoot工程gateway,引入网关依赖
-
编写启动类
-
编写基础配置和路由规则
-
启动网关服务进行测试
创建服务:
引入依赖:
<!--网关-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--nacos服务发现依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2)编写启动类
package cn.itcast.gateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
}
3)编写基础配置和路由规则
创建application.yml文件,内容如下:
注:routes下面的id, uri, predicates的配置在idea中没有提示
server:
port: 10010
spring:
application:
name: gateway
cloud:
gateway:
routes:
- id: userservicegateway #一个路由的id,可以是随意的。
uri: lb://userservice # 使用负载均衡,把请求转发到userservice这个微服务里面去。
predicates:
- Path=/user/** # 断言(如果用户访问的路径是: /user/下面的任意路径,我就把这个请求路由到lb://userservice这个微服务里面)
- id: orderservicegateway #一个路由的id,可以是随意的。
uri: lb://orderservice # 使用负载均衡,把请求转发到userservice这个微服务里面去。
predicates:
- Path=/order/**
nacos:
server-addr: localhost:80
我们将符合Path
规则的一切请求,都代理到 uri
参数指定的地址。
本例中,我们将 /user/**
开头的请求,代理到lb://userservice
,lb是LoadBalanced负载均衡的缩写,根据服务名拉取服务列表,实现负载均衡。注:Path后面是等于,不是冒号,这只是一个字符串
.默认过滤器
如果要对所有的路由都生效,则可以将过滤器工厂写到default-filters下,修改gateway服务的application.yml文件:
-
配置与routes在同一级
-
进行以下配置,格式如下:
spring:
cloud:
gateway:
routes:
- id: userservice
uri: lb://userservice
predicates:
- Path=/user/**
- After=2022-01-14T22:42:00.789-07:00[Asia/Shanghai]
default-filters:
- AddRequestHeader=name,zhangsan