暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Spring Cloud 实战第6篇 | Gateway路由转发

技术管理修行 2021-08-10
742


简介

SpringCloud Gateway 是 Spring Cloud 生态系统中的网关,基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发,其目的是替代 Netflix Zuul,它不仅提供了统一的路由方式,并且基于 Filter 链的方式提供了网关的基本功能,例如:安全,监控/埋点,和限流等。它是基于Nttey的响应式开发模式。

本文目标


Nacos 作为配置中心保存Gateway核心配置,Nacos作为注册中心配合 SpringCloud Gateway 实现路由转发。

项目实战


1. 在项目 yh-blog-infrastructure 下新建 Module : yh-blog-infrastructure-gateway,并在pom.xml中添加如下 gateway 依赖:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
</dependencies>
2. 在其父项目中引入 nacos 注册中心和配置中心相关依赖
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
3. 在启动类开启服务发现
package com.java955.gateway;




import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;


@SpringBootApplication
@EnableDiscoveryClient
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
}
4. 在resources 下新建 bootstrap.yml 文件,并添加nacos注册中心和配置中心相关配置,配置说明详见前面的文章:
server:
port: 9001
#配置应用服务名称
spring:
application:
name: yh-blog-infrastructure-gateway
cloud:
nacos:
discovery:
#配置nacos虚拟IP地址
server-addr: 192.168.117.110:8848
config:
server-addr: 192.168.117.110:8848
file-extension: yaml
group: blog-gateway
prefix: ${spring.application.name}
5. 在Nacos管理中新建配置信息。

配置说明:
  • Data ID :  yh-blog-infrastructure-gateway.yaml

  • Group : blog-gateway 【与本地配置中的 group 对应】

  • 配置格式:yaml 【与本地配置中的 file-extension 对应】


6. 配置中心中 gateway 的核心配置如下:
spring:
cloud:
gateway:
discovery:
locator:
enabled: false
routes:
- id: yh-blog-service-test
uri: lb://yh-blog-service-test
order: 1
filters:
- StripPrefix=1
predicates:
- Path=/test/**

配置说明:


  • 第6行 enable :配置为true后,gateway会与服务注册和发现组件相结合生成一套默认的配置,这里我们配置为false,显式地配置

  • 第8行 id :路由唯一标识,这里建议使用服务名

  • 第9行 uri :  表示转发的地址,lb:// 的意思是采用 LoadBalanceClient 的方式请求,后面是 nacos 注册中心中的服务名

  • 第10行 order :  数字越小表示优先级越高

  • 第12行 StripPrefix :去掉某一层前缀,这里设置为1,即去掉第一层前缀,否则用默认的地址无法转发

  • 第13行 predicates  -Path=/test/** 表示当请求路径包含test时,会通过uri配置的负载均衡地址请求对应的服务


测试


  1.  依次启动 article、test、gateway 服务,为了测试负载均衡,我们启动两个article服务,我们可以看到nacos中的配置列表和注册列表如下所示:



2. 使用原来的方式请求测试:http://localhost:8200/test

3. 使用网关地址访问:http://localhost:9001/test/test


文章转载自技术管理修行,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论