当前位置: 首页 > news >正文

SpringCloud Gateway服务网关的介绍与使用

目录

  • 1、网关介绍
  • 2、SpringCloudGateway工作原理
  • 3、三大组件
    • 3.1 、Route(路由)
    • 3.2、断言 Predicate
    • 3.3、过滤器 filter
  • 4、Gateway整合nacos的使用
    • 4.1 、引入依赖
    • 4.2、 编写基础类和启动类
    • 4.3、 编写基础配置和路由规则
    • 4.4 、测试结果

1、网关介绍

客户机和服务器不断的高并发请求,微服务架构就急需一个API网关通统一入口。网关可以负责保护和路由消息、隐藏服务、负载均衡以及许多其他有用的功能。Spring Cloud Gateway为您提供了对API层的精确控制,它集成了Spring Cloud服务发现和客户端负载平衡解决方案,以简化配置和维护。
在这里插入图片描述

2、SpringCloudGateway工作原理

在这里插入图片描述
在这里插入图片描述

3、三大组件

**Route(路由):**路由是网关的基本单元,由ID、URI、一组Predicate、一组Filter组成,根据Predicate进行匹配转发。
Predicate(谓语、断言): 路由转发的判断条件,目前SpringCloud Gateway支持多种方式,常见如:Path、Query、Method、Header等,写法必须遵循 key=vlue的形式
Filter(过滤器): 过滤器是路由转发请求时所经过的过滤逻辑,可用于修改请求、响应内容

3.1 、Route(路由)

    Route 主要由 路由id、目标uri、断言集合和过滤器集合组成,那我们简单看看这些属性到底有什么作用。

(1)id:路由标识,要求唯一,名称任意(默认值 uuid,一般不用,需要自定义)

(2)uri:请求最终被转发到的目标地址

(3)order: 路由优先级,数字越小,优先级越高

(4)predicates:断言数组,即判断条件,如果返回值是boolean,则转发请求到 uri 属性指定的服务中

(5)filters:过滤器数组,在请求传递过程中,对请求做一些修改

3.2、断言 Predicate

Predicate 来自于 Java8 的接口。Gateway的断言就是从Request中获取请求数据进行判断,返回true或者false
RoutePredicateHandlerMapping负载寻找路由规则,把所有的route遍历一遍,获取和当前请求匹配的路由规则

3.3、过滤器 filter

客户端向Spring Cloud Gateway发出请求。如果网关处理程序映射确定请求与路由匹配,则将其发送到网关Web处理程序。此处理程序通过特定于请求的筛选器链运行请求。过滤器用虚线分隔的原因是过滤器可以在发送代理请求之前和之后运行逻辑。执行所有“预”过滤器逻辑。然后发出代理请求。发出代理请求后,将运行“post”过滤器逻辑。
Gateway 过滤器从作用范围可分为两种:
GatewayFilter:应用到单个路由或者一个分组的路由上(需要在配置文件中配置).路由过滤器允许以某种方式修改传入的HTTP请求或传出的HTTP响应。路由过滤器的作用域是特定的路由。
GlobalFilter:应用到所有的路由上(无需配置,全局生效),拥有路由过滤器的功能。

4、Gateway整合nacos的使用

模块文件
在这里插入图片描述

4.1 、引入依赖

gateway模块依赖

 <dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><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-openfeign</artifactId><version>2.2.3.RELEASE</version></dependency></dependencies>

provider模块依赖

 <dependencies><!-- 引入阿里的nacos作为服务注册中心 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency></dependencies>

4.2、 编写基础类和启动类

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);}
}

provider启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {public static void main(String[] args) {SpringApplication.run(ProviderApplication.class, args);}
}

providerController类

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class ProviderController {private String name;@GetMapping("send")public String send(){name="通过网关调用provider";return name;}
}

4.3、 编写基础配置和路由规则

gateway配置文件

server:port: 5000spring:application:name: gatewaycloud:nacos:discovery:server-addr: 10.32.93.135:8848gateway:discovery:locator:enabled: falselowerCaseServiceId: trueroutes:- id: provideruri: lb://providerpredicates:- Path=/provider/**filters:- StripPrefix=1

provider配置模块

spring.application.name=provider
spring.cloud.nacos.config.serveraddr=localhost:8848
server.port= 8000

4.4 、测试结果

启动以后,可以看到gateway,provider模块已经注册到nacos上了
在这里插入图片描述
在浏览器上输入地址:http://localhost:5000/provider/send/
在这里插入图片描述
可以看到测试成功

http://www.lryc.cn/news/133914.html

相关文章:

  • 深入解析:如何打造高效的直播视频美颜SDK
  • 每日一博 - MPP(Massively Parallel Processing,大规模并行处理)架构
  • ssh框架原理及流程
  • eslint 配置和用法
  • 字符设备驱动实例(PWM和RTC)
  • Ribbon 源码分析
  • 【1-3章】Spark编程基础(Python版)
  • 宇宙原理:黑洞基础。
  • 分类预测 | MATLAB实现SCNGO-CNN-LSTM-Attention数据分类预测
  • Android学习之路(7) Frament
  • metallb , istio ingress 部署httpbin使用例子
  • 基于swing的销售管理系统java仓库库存信息jsp源代码mysql
  • FreeCAD傻瓜式教程之约束设定和构建实体、开孔、调整颜色等
  • 代码随想录算法训练营day41 | 343. 整数拆分,96. 不同的二叉搜索树
  • 飞天使-k8sv1.14二进制安装
  • TypeScript封装Axios
  • 指针(一)【C语言进阶版】
  • 回归预测 | MATLAB实现SA-BP模拟退火算法优化BP神经网络多输入单输出回归预测(多指标,多图)
  • springMVC 已解密的登录请求
  • 机器学习赋能乳腺癌预测:如何使用贝叶斯分级进行精确诊断?
  • Java后端开发面试题——框架篇
  • 【新版】系统架构设计师 - 系统测试与维护
  • 使用 useEffect 和 reactStrictMode:优化 React 组件的性能和可靠性
  • 商业智能BI是什么都不明白,如何实现数字化?
  • 【五子棋】
  • docker 01(初识docker)
  • 爬虫逆向实战(十九)--某号站登录
  • linux环境docker安装mysql
  • taro h5 formData上传图片的坑-Required request part ‘file‘ is not present
  • GNU GRUB version 2.06 Minimal Bash-lke line editing is supported 问题修复