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

SpringCloud网关-gateway

一 什么是网关?为什么选择 Gateway?

网关功能如下:

  1. 身份认证和权限校验
  2. 服务路由、负载均衡
  3. 请求限流

在 Spring Cloud 中网关的实现包含两种:

  1. Gateway(推荐):是基于 Spring5 中提供的 WebFlux ,属于响应式编程的实现,具备更好的性能,因此作为比较推荐实现网关的方式。
  2. Zuul:是基于 Servlet 的实现,属于阻塞式编程

 二 Gateway 网关

主要分为以下几个步骤:

1 创建新的module-gateway

引入SpringCloudGateway的依赖和nacos的服务发现依赖:

<!--网关依赖-->
<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>

高版本错误:

a)如果使用的是 springcloud高版本(例如 2020.1.0),那么 gateway 中的 ribbon 负载均衡已经被剔除了,因此需要引入 springcloud loadbalencer 作为 gateway 的负载均衡.

 

        <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-loadbalancer</artifactId></dependency>

b)引入此依赖后,可能还会报 cache 的警告,引入一下两个依赖即可

        <dependency><groupId>com.github.ben-manes.caffeine</groupId><artifactId>caffeine</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId></dependency>

2 编写nacos地址和路由配置

server:port: 10010 # 网关端口
spring:application:name: gatewaycloud:nacos:server-addr: localhost:8848 # nacos 地址gateway:routes:  # 网关路由配置- id: user-service # 路由 id,自定义,只要唯一即可uri: lb://userservice # 路由的目标地址 lb 就是负载均衡,后面跟微服务名predicates: #路由断言- Path=/user/** # 这个是按照路径匹配,只要以 /user/ 开头就符合要求- id: order-serviceuri: lb://orderservicepredicates:- Path=/order/**

路由配置解释如下:

  1. 路由id:路由的唯一标示(自定义)
  2. 路由目标(uri):路由的目标地址,http代表固定地址,lb代表根据服务名负载均衡
  3. 路由断言(predicates):路由的规则(匹配的才被 gateway 拦截下来).
  4. 路由过滤器(filters):对请求或响应做处理,例如 StripProfix 就是去掉指定数量的前缀路由,例如请求是 api/user/login,filters 处理为 StripProfix = 1(去掉一个前缀),那么处理后请求就是 /user/login.

3 效果展示

出现下述结果展示,说明路由转发成功.

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

相关文章:

  • LiveData是如何感知Room数据变化的
  • 【自动化】WebUI自动化通过读取用户数据的方式启动浏览器实现绕过相关登录验证的方法。
  • 信号:干扰类别及特征提取
  • 【推荐】用scss循环zoom缩放比例,解决可视化大屏在不同分辨率屏幕下的适配问题
  • 23中设计模式之一— — — —命令模式的详细介绍
  • 解决 Mac Django 连接Mysql 出现 image not found 问题
  • EitbaseEX香港业务开展,提升用户友好交易体验
  • ROS学习记录:自定义消息类型
  • 创新实训2024.06.06日志:部署web服务
  • 使用C++实现YOLO图像分类:从环境搭建到性能评估的完整指南
  • Linux中安装Docker,并使用Docker安装MySQL和Redis
  • 期货短线交易的核心技术是什么
  • VSCode+Vite+Vue3断点调试
  • RPC框架原理(一)
  • LCTF 2018 bestphp‘s revenge
  • MySQL主从搭建--保姆级教学
  • Modbus通信协议--RTU
  • 我是大学生,应该选系统运维方向,还是web开发方向?
  • Qt窗口与对话框
  • 【笔记】Windows 中 一键部署本地私人专属知识库:MaxKB + Docker + MaxKB docker + Ollama
  • 【Vue】scoped解决样式冲突
  • word模板内容替换
  • docker安装和使用
  • 【AIGC X UML 落地】通过多智能体实现自然语言绘制UML图
  • C++访问越界
  • MATLAB format
  • Face Forgery Detection by 3D Decomposition
  • socket网络编程——多进程、多线程处理并发
  • C++---模板进阶(非类型模板参数,模板的特化,模板分离编译)
  • 锂电池寿命预测 | Matlab基于SSA-SVR麻雀优化支持向量回归的锂离子电池剩余寿命预测