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

Spring cloud GateWay入门

Spring cloud GateWay

微服务为什么需要API网关?

  1. 在微服务架构中,通常一个系统会拆分为多个微服务,面对这么多微服务客户端应该如何去调用
  2. 如果根据每个微服务的地址发起调用,存在如下问题:
    • 客户端多次请求不同的微服务,会增加客户端代码和配置的复杂性,维护成本比价高
    • 认证复杂,每个微服务可能存在不同的认证方式,客户端去调用,要去适配不同的认证
    • 存在跨域的请求,调用链有一定的相对复杂性(防火墙 / 浏览器不友好的协议)
    • 难以重构,随着项目的迭代,可能需要重新划分微服务
  3. 为了解决上面的问题,微服务引入了API网关的概念API网关为微服务架构的系统提供简单、有效且统一的API路由管理,作为系统的统一入口,提供内部服务的路由中转,给客户端提供统一的服务,可以实现一些和业务没有耦合的公用逻辑,主要功能包含认证、鉴权、路由转发、安全策略、防刷、流量控制、监控日志等。

Spring Cloud GateWay是什么?

  • 官方文档:https://docs.spring.io/spring-cloud-gateway/reference/。
  • Spring Cloud Gateway是Spring cloud官方推出的第二代网关框架,定位于取代Netflix Zuul。
  • Spring Cloud Gateway旨在为微服务架构提供一种简单且有效的API路由的管理方式,并基于Filter的方式提供网关的基本功能,例如说案例认证、监控、限流等等。
  • Spring Cloud Gateway是由WebFlux+Netty+Reactor实现的响应式的API网关。它不能在传统的servlet容器中工作,也不能构建成war包。

微服快速接入Spring Cloud GateWay

构建网关服务

  1. 创建一个新的module模块gateway

  2. pom.xml中引入Spring Cloud 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>
    

微服务快速接入网关服务

  1. 以订单服务为例,在网关服务的application.yml
    server:
      port: 18888
    
    spring:
      application:
        name: tlmall-gateway
      cloud:
        nacos:
          discovery:
            server-addr: tlmall-nacos-server:8848
    
        gateway:
          #设置路由:路由id、路由到微服务的uri、断言
          routes:
            - id: order_route  #路由ID,全局唯一,建议配置服务名
              uri: lb://tlmall-order  #lb 整合负载均衡器loadbalancer
              predicates:
                - Path=/order/**   # 断言,路径相匹配的进行路由
    

2.库存服务,账户服务同上

3.网关服务的完整的application.yml配置如下:

server:
  port: 18888

spring:
  application:
    name: tlmall-gateway
  cloud:
    nacos:
      discovery:
        server-addr: tlmall-nacos-server:8848

    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/**   # 断言,路径相匹配的进行路由

测试,启动网关服务

  1. postman中通过网关服务的18888端口下单,看能否成功
  2. 前端服务order.html中访问地址都替换为gateway:18888,测试下单是否成功

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

相关文章:

  • Scala_【4】流程控制
  • 详解MySQL SQL删除(超详,7K,含实例与分析)
  • 【Go学习】-01-2-常见类型及关键字
  • 【踩坑指南:2025年最新】如何在Linux(Ubuntu)启动第一个Scala Hello World程序(Scala3)
  • Java重要面试名词整理(十八):Sentinel
  • C语言——字符函数和内存函数
  • 江科大学习笔记之——标准库以及其HAL库LED流水灯
  • Docker--Bitnami/kibana
  • 检索分析服务 Elasticsearch版
  • 搭建android开发环境 android studio
  • 闲谭Scala(3)--使用IDEA开发Scala
  • 专业140+总分410+南京大学851信号与系统考研经验南大电子信息通信集成电路,真题,大纲。参考书。
  • 数据库锁的深入探讨
  • 在Windows上读写Linux磁盘镜像的一种方法
  • ElasticSearch 分布式部署
  • 现在Java面试需要提前准备哪些知识?
  • 仓颉语言实战——3.表达式
  • 如何学习、使用Ai,才能跟上时代的步伐?
  • # 光速上手 - JPA 原生 sql DTO 投影
  • Lucene 漏洞历险记:修复损坏的索引异常
  • 记录一个我在idea启动时的报错
  • CannotRetrieveUpdates alert in disconnected OCP 4 cluster解决
  • upload-labs关卡记录12
  • 钉钉h5微应用,鉴权提示dd.config错误说明,提示“jsapi ticket读取失败
  • 如何做好IT类的技术面试?
  • Android Room 框架的初步使用