SpringCloud.03.网关Gateway

目录

网关Gateway的概念:

准备

使用

方式一

因为配置了网关所以可以直接通过gateway发送请求

方式二

修改配置前:http://localhost:8082/provider/run

方式三(动态路由)

导入配置类


网关Gateway的概念:

Spring Cloud Gateway 是 Spring 官方基于 Spring5.0 、 SpringBoot2.0 和 Project Reactor 等技术开发的网

旨在为微服务框架提供一种简单而有效的统一的 API 路由管理方式,统一访问接口。
Spring Cloud Gateway 作为 Spring Cloud 生态体系中的网关,目标是替代 Netflix 的 Zuul ,其不仅提供统
一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全、监控 / 埋点和限流等等。
它是基于 Netty 的响应式开发模式。
1️⃣ 路由( route ):路由是网关最基础的部分,路由信息由一个 ID ,一个目的 URL 、一组断言工厂和一
组 Filter 组成。如果断言为真,则说明请求 URL 和配置的路由匹配。
2️⃣ 断言( Predicate ): Java8 中的断言函数, Spring Cloud Gateway 中的断言函数输入类型是
Spring5.0 框架中的 ServerWebExchange 。 Spring Cloud Gateway 中的断言函数允许开发者去定义匹配
来自 http Request 中的任何信息,比如请求头和参数等。
3️⃣ 过滤器( Filter ):一个标准的 Spring WebFilter , Spring Cloud Gateway 中的 Filter 分为两种类型:
Gateway Filter 和 Global Filter 。过滤器 Filter 可以对请求和响应进行处理。

准备

创建一个springboot项目命名为gateway,通过该项目(网关)统一管理provider和consumer的所有请求

使用

将以下依赖导入到gateway项目

java 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
方式一

配置gateway项目的yml文件

java 复制代码
server:
  port: 8082
spring:
  application:
    name: gateway
  cloud:
    nacos:
        server-addr: localhost:8848
gateway:
discovery:
locator:
#是否与服务发现组件进行结合,通过service-id(必须设置成大写)转发到具体的服务实例。默认
false
#为true代表开启基于服务发现的路由规则。
enabled: false
#配置之后访问时service-id无需大写
lower-case-service-id: true
因为配置了网关所以可以直接通过gateway发送请求

配置前:http://localhost:8080/provider/run

配置后:http://localhost:8082/provider/run

方式二

配置gateway项目的yml文件

java 复制代码
server:
  port: 8082
spring:
  application:
    name: gateway
  cloud:
    nacos:
        server-addr: localhost:8848
gateway:
discovery:
locator:
#是否与服务发现组件进行结合,通过service-id(必须设置成大写)转发到具体的服务实例。默认
false
#为true代表开启基于服务发现的路由规则。
enabled: false
#配置之后访问时service-id无需大写
lower-case-service-id: true
routes:
# 路由标识(id:标识,具有唯一性)
配合读取类使用
- id: user-consumer-api
#目标服务地址(uri:地址,请求转发后的地址),会自动从注册中心获得服务的IP,不需要手动写死
uri: lb://consumer
#优先级,越小越优先
#order: 999
#路由条件(predicates:断言)
predicates:
# 路径匹配,
- Path=/aa/**
filters:
#路径前缀删除示例:请求/name/bar/foo,StripPrefix=2,去除掉前面两个前缀之后,最后转
发到目标服务的路径为/foo
#前缀过滤,请求地址:http://localhost:8084/usr/hello
#此处配置去掉1个路径前缀,再配置上面的 Path=/usr/**,就将**转发到指定的微服务
#因为这个api相当于是服务名,只是为了方便以后nginx的代码加上去的,对于服务提供者
service-client来说,不需要这段地址,所以需要去掉
- StripPrefix=1
修改配置前:http://localhost:8082/provider/run

修改配置后: http://localhost:8082/prov/run

方式三**(动态路由)**

配置gateway项目的yml文件

java 复制代码
server:
  port: 8082
spring:
  application:
    name: gateway
  cloud:
    nacos:
        server-addr: localhost:8848
gateway:
nacos:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
# namespace: xxx-xx-xx-xx
data-id: dynamic-routing.json
group: DEFAULT_GROUP

使用动态路由需要配合读取类使用

dynamic-routing.json 文件

java 复制代码
{
  "refreshGatewayRoute": true,
  "routeList": [
    {
      "id": "provider-api",
      "predicates": [
        {
          "name": "Path",
          "args": {
            "_genkey_0": "/ppp/**"
          }
        }
      ],
      "filters": [
        {
          "name": "StripPrefix",
          "args": {
            "_genkey_0": "1"
          }
        }
      ],
      "uri": "lb://provider",
      "order": 0
    }
  ]
}

导入配置类

配置文件放在nacos后可以通过配置类解析出nacos中的json文件,因为json文件配置了所有请求;

上述代码只配置了provider的请求所以只能访问provider且通过 http://localhost:8082/ppp/run 进行访问。如果访问 http://localhost:8082/consumer/test01 会被网关拦截

配置类放在资源中,有需要自取。

相关推荐
q***56383 分钟前
Java进阶-SPI机制
java·开发语言
MC丶科9 分钟前
Spring Boot + Elasticsearch 实现全文搜索功能(商品搜索)!让搜索快如闪电
spring boot·后端·elasticsearch·软考高级·软考架构师
t***265910 分钟前
Springboot中使用Elasticsearch(部署+使用+讲解 最完整)
spring boot·elasticsearch·jenkins
曾经的三心草14 分钟前
基于正倒排索引的Java文档搜索引擎2-实现Index类
java·python·搜索引擎
JienDa1 小时前
JienDa聊PHP:CSDN博客仿站实战中PHP框架的协同架构方略
java·架构·php
大迪吃小迪1 小时前
每秒 400 请求场景下,线程池如何合理配置?
java·开发语言
踏浪无痕2 小时前
手写Spring事务框架:200行代码揭开@Transactional的神秘面纱( 附完整源代码)
spring boot·spring·spring cloud
踏浪无痕2 小时前
5个测试用例带你彻底理解Spring事务传播行为( 附完整源代码)
spring boot·spring·spring cloud
R***62312 小时前
Spring Boot 整合 log4j2 日志配置教程
spring boot·单元测试·log4j