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

gateway 微服务的入口-笔记

本文属于b站图灵课堂springcloud笔记系列。讲的好还不要钱,值得推荐。

为什么需要API网关?

  • 客户端多次请求不同的微服务,会增加客户端代码和配置的复杂性,维护成本比价高
  • 认证复杂,每个微服务可能存在不同的认证方式,客户端去调用,要去适配不同的认证
  • 存在跨域的请求,调用链有一定的相对复杂性(防火墙 / 浏览器不友好的协议)
  • 难以重构,随着项目的迭代,可能需要重新划分微服务

为了解决上面的问题,引入了API网关

Spring Cloud Gateway 是什么?

This project provides an API Gateway built on top of the Spring Ecosystem, including: Spring 6, Spring Boot 3 and Project Reactor. Spring Cloud Gateway aims to provide a simple, yet effective way to route to APIs and provide cross cutting concerns to them such as: security, monitoring/metrics, and resiliency.

There are two distinct flavors of Spring Cloud Gateway: Server and Proxy Exchange. Each flavor offers WebFlux and MVC compatibility.

  • The Server variant is a full-featured API gateway that can be standalone or embedded in a Spring Boot application.

  • The Proxy Exchange variant is exclusively for use in annotation based WebFlux or MVC applications and allows the use of a special ProxyExchange object as a parameter to a web handler method.

就是spring cloud 官方推出的第二代网关,是由 WebFlux + Netty + Reactor 实现的响应式的 API 网关。

特性:

  • Java 17

  • Spring Framework 6

  • Spring Boot 3

  • Dynamic routing

  • Route matching built into Spring Handler Mapping

  • Route matching on HTTP Request (Path, Method, Header, Host, etc…​)

  • Filters scoped to Matching Route

  • Filters can modify downstream HTTP Request and HTTP Response (Add/Remove Headers, Add/Remove Parameters, Rewrite Path, Set Path, Hystrix, etc…​)

  • API or configuration driven

  • Supports Spring Cloud DiscoveryClient for configuring Routes

其余详细介绍请看GitHub - spring-cloud/spring-cloud-gateway: An API Gateway built on Spring Framework and Spring Boot providing routing and more.

 行业中通常把网关分为两个大类:流量网关与业务网关,流量网关主要提供全局性的、与后端业务无关的策略配置,如NG,随着应用架构模式从单体演进到现在的分布式微服务,业务网关也有了新的叫法 - 微服务网关,比如gateway.当然阿里也有开源的Higress实现了流量网关 + 微服务网关 + 安全网关高度集成的功能,这是一种发展趋势。

微服务接入gateway

新建一个模块,就是一个一个启动类

核心配置,pom引入gateway依赖

<!-- 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>

        <!-- loadbalancer 负载均衡器依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-loadbalancer</artifactId>
        </dependency>

配置文件:application.yml 如下

server:
  port: 18888

spring:
  application:
    name: tlmall-gateway
  cloud:
    nacos:
#      discovery:
#        server-addr: tlmall-nacos-server:8848
      config:
        server-addr: tlmall-nacos-server:8848
        file-extension: yml   #指定配置文件扩展名为yml

#    gateway:
#      #设置路由:路由id、路由到微服务的uri、断言
#      routes:
#        - id: order_route  #路由ID,全局唯一,建议配置服务名
#          uri: lb://tlmall-order  #lb 整合负载均衡器loadbalancer
#          predicates:
#            - Path=/order/**   # 断言,路径相匹配的进行路由
#
#        - id: storage_route   #路由ID,全局唯一,建议配置服务名
#          uri: lb://tlmall-storage  #lb 整合负载均衡器loadbalancer
#          predicates:
#            - Path=/storage/**   # 断言,路径相匹配的进行路由
#
#        - id: account_route   #路由ID,全局唯一,建议配置服务名
#          uri: lb://tlmall-account  #lb 整合负载均衡器loadbalancer
#          predicates:
#            - Path=/account/**   # 断言,路径相匹配的进行路由

  config:
    import:
      - optional:nacos:${spring.application.name}.yml
      - nacos:nacos-discovery.yml


注释掉内容抽取到nacos, Nacos配置中心创建一个dataId为tlmall-gateway.yml的配置,导入网关的配置.

测试:

启动网关服务。

修改postman,改用网关地址下单:http://127.0.0.1:18888/order/create

修改页面地址,order.html中访问地址都替换为tmall-gateway:18888,测试下单是否成功

小结:gateway可以实现微服务中流量入口。


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

相关文章:

  • vue3组件传值具体使用
  • js学习笔记(2)
  • HMV Challenges 022 Writeup
  • Gin 学习笔记
  • 1.CSS的三大特性
  • 【Java】常用工具类方法:树形结构、获取IP、对象拷贝、File相关、雪花算法等
  • opencv实战--颜色识别
  • 数据结构day3作业
  • Python 写的《桌面时钟》屏保
  • React自学:如何使用localStorage,以及如何实现删除笔记操作
  • docker-4.迁移存储目录
  • 04 条件渲染
  • 《红队蓝队在网络安全对抗演练中的运作模式》
  • 日拱一卒(16)——leetcode学习记录:山脉数组峰值索引
  • CTF知识集-SQL注入
  • oracle创建用户,并授权dba权限
  • RabbitMQ基本使用以及整合Java项目
  • linux上qt打包(二)
  • Windows环境 (Ubuntu 24.04.1 LTS ) 国内镜像,用apt-get命令安装RabbitMQ,java代码样例
  • Windows server服务器之网络安全管理(防火墙入站规则创建)
  • C# 23种设计模式(4)访问者模式(Visitor Pattern)
  • @pytest.fixture() 跟 @pytest.fixture有区别吗?
  • 机器学习实战31-基于机器学习算法对某年福州市各初中重点高中录取率进行数学分析,评估性价比较高的学校。
  • 探索 PIE 在 ESP32-P4 上的应用
  • 找出一个数组中出现次数最多的那个元素。:哈希表:JAVA
  • SQL, 将分段数不确定的字符串拆分成多列