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

Spring Cloud Alibaba-(6)Spring Cloud Gateway【网关】

Spring Cloud Alibaba-(1)搭建项目环境

Spring Cloud Alibaba-(2)Nacos【服务注册与发现、配置管理】

Spring Cloud Alibaba-(3)OpenFeign【服务调用】

Spring Cloud Alibaba-(4)Sentinel【流控和降级】

Spring Cloud Alibaba-(5)Seata【分布式事务】

Spring Cloud Alibaba-(6)Spring Cloud Gateway【网关】

Spring Cloud Alibaba-(7)RocketMQ【分布式消息队列】

1.什么是网关,微服务为什么要使用网关?

Gateway(网关)是一种用于管理和协调外部请求与内部服务交互的技术组件。它充当了一个中心化的代理,负责接收来自客户端的所有请求,并将其转发到适当的后端服务。以下是关于为什么要在微服务架构中使用Gateway的原因:

(1)统一接口:对外部客户端提供一个统一的访问入口。

(2)智能路由:根据请求的内容(如路径、头信息等)决定将请求转发给哪个后端服务。

(3)负载均衡:在多个相同类型的后端服务实例之间分配请求。

(4)认证和鉴权:在请求到达后端服务之前验证用户的凭证。

(5)限流:控制每个客户端的请求频率,防止滥用或DDoS攻击。

(6)缓存:存储响应数据,减少对后端服务的重复请求。

(7)协议转换:在不同的通信协议之间转换请求和响应。

(8)监控和日志:记录请求和响应的详细信息,帮助诊断问题和优化性能。

(9)错误处理:统一处理错误响应,向客户端提供一致性的错误信息。

2.项目创建 gateway 微服务

3. Gateway 整合 Nacos

3.1 引入Maven依赖

<!-- gateway 网关 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

<!-- nacos-discovery 服务发现 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

3.2 配置 bootstrap.yml

server:
  port: 8200

spring:
  application:
    name: gateway
  cloud:
    nacos:
      discovery:
        server-addr: http://localhost:8848
    gateway:
      routes:
        - id: order_route          # 路由id,路由唯一标识
          uri: lb://order-service  # uri:需要转发的地址  lb:使用 nacos 本地负载均衡策略  order-service:服务名
          predicates:
            - Path=/order/**       # 访问网关,如果路径是以 /order 开头的所有请求,转发到 order-service
        - id: product_route
          uri: lb://product-service
          predicates:
            - Path=/product/**

3.3 启动 gateway 服务,http://localhost:8200/product/getById/1 经过 Gateway 请求产品服务

4.断言工厂(Predicate Factories)

断言工厂用于定义路由规则,决定请求是否应该被路由到某个服务。常用的断言工厂包括:

断言工厂

配置

用途

Path

- Path=/api/**

匹配请求路径

Host

- Host=example.com

匹配请求的主机名

Method

- Method=GET

匹配请求的方法类型(GET、POST等)

Header

- Header=X-Token

匹配请求头部的某个字段

Query

- Query=param

匹配请求的查询参数

Cookie

- Cookie=JSESSIONID

匹配请求的Cookie

RemoteAddr

- RemoteAddr=192.168.0.0/24

匹配客户端的远程地址(IP地址)

Port

- Port=8080

匹配客户端连接的端口号

Weight- Weight=group1,2基于权重进行负载均衡

5.过滤器工厂(Filter Factories)-局部过滤器

过滤器工厂用于在请求进入或离开网关时执行某些操作。常用的过滤器工厂包括:

过滤器工厂配置用途

AddRequestHeader

- AddRequestHeader=X-Request-Header, value添加请求头

AddResponseHeader

- AddResponseHeader=X-Response-Header, value添加响应头
SetPath- SetPath=/new/path重写请求路径
SetQueryString- SetQueryString=query=value重写请求查询参数
StripPrefix- StripPrefix=/order-serv移除请求路径的前缀
Retry- Retry=404,3实现请求重试机制

 6. bootstrap.yml 使用断言工厂、过滤器工厂

spring:
  cloud:
    gateway:
      routes:
        - id: example-route
          uri: lb://example-service
          predicates:
            - Path=/api/**
          filters:
            - AddRequestHeader=X-Request-Header, value
            - SetPath=/new/path

7.Gateway 整合 Sentinel 实现网关流控降级

7.1 引入Maven依赖

<!-- gateway 网关 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

<!-- sentinel 限流降级-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

<!-- sentinel 整合 gateway-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
</dependency>

7.2 bootstrap.yml 配置 Sentinel 控制台地址-http://localhost:8858

server:
  port: 8200

spring:
  application:
    name: gateway
  cloud:
    nacos:
      discovery:
        server-addr: http://localhost:8848
    gateway:
      routes:
        - id: order_route          # 路由id,路由唯一标识
          uri: lb://order-service  # uri:路由转发的地址  lb:使用 nacos 本地负载均衡策略  order-service:服务名
          predicates:              # 断言:对请求进行匹配,匹配成功就路由转发,匹配不成功返回404
            - Path=/order/**       # 访问网关,如果路径是以 /order 开头的所有请求,转发到 order-service
        - id: product_route
          uri: lb://product-service
          predicates:
            - Path=/product/**
    sentinel:
      transport:
        dashboard: http://localhost:8858


http://www.kler.cn/a/322476.html

相关文章:

  • 十五届蓝桥杯赛题-c/c++ 大学b组
  • Ascend C算子性能优化实用技巧05——API使用优化
  • 【Java 学习】数据类型、变量、运算符、条件控制语句
  • PyTorch——从入门到精通:PyTorch基础知识(张量)【PyTorch系统学习】
  • Uniapp 引入 Android aar 包 和 Android 离线打包
  • 基于YOLOv8深度学习的公共卫生防护口罩佩戴检测系统(PyQt5界面+数据集+训练代码)
  • windows控制台ssh登录(ssh远程登录)(ssh连接ssh、直连ssh直连、cmd连接ssh)控制台连接ssh
  • 18.2 k8s-apiserver监控源码解读
  • 【移植】Combo解决方案之W800芯片移植案例
  • YOLOv8改进 - 注意力篇 - 引入(A2-Nets)Double Attention Networks注意力机制
  • 【machine learning-17-分类(逻辑回归sigmod)】
  • ‌股市大涨,科技股受捧,机器视觉行业有望迎来新一轮大批量投资,拉动内需消费,促进大量高薪员工
  • 使用LSTM模型进行时间序列数据预测的示例
  • 代码随想录算法训练营Day10
  • 611. 有效三角形的个数
  • 【d52】【Java】【力扣】19.删除链表的倒数第N个节点
  • Python | Leetcode Python题解之第432题全O(1)的数据结构
  • windows端后端运行python程序,类似nohup
  • 大数据Flink(一百二十四):案例实践——淘宝母婴数据加速查询
  • 优青博导团队携手提供组学技术服务、表观组分析、互作组分析、遗传转化实验、单细胞检测等全方位生物医学支持
  • 微服务--ES(Elasticsearch)
  • 如何在谷歌浏览器上玩大型多人在线游戏
  • 【软考】结构化分析方法概述
  • 车载视频监控:安全生产与管理的新趋势
  • 笔记整理—linux进程部分(1)进程终止函数注册、进程环境、进程虚拟地址
  • 基于顺序表的通讯录(纯代码)