Spring Cloud 创建Spring Cloud Gateway网关服务

本文介绍API网关的概念及其核心功能,如路由、负载均衡、统一鉴权等,并详细讲解如何集成SpringCloud Gateway服务,包括配置步骤和服务启动流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring Cloud 创建Spring Cloud Gateway网关服务

一、API网关简介
  • 概念简介

    ​ 在通信领域,网关(Gateway)又称网间连接器、协议转换器。网关在网络层以上实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。

    ​ 在系统架构中,和上面定义类似,API网关负责联通多个微服务或者内部服务的通信,负责所有请求的鉴权转发等处理,可以说,**API网关是一个服务器,是系统的唯一入口。**API网关封装了系统内部架构,为每个客户端提供一个定制的API,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。

    架构图示:

    在这里插入图片描述

  • 网关的基本功能

    路由功能:路由是微服务网关的核心能力。通过路由功能微服务网关可以将请求转发到目标微服务。

    负载均衡:API网关结合负载均衡技术,利用Eureka或者Consul等服务发现工具,通过轮询、指定权重、IP地址哈希等机制实现下游服务的负载均衡。

    统一鉴权:网关应该能够成功进行身份验证并仅允许可信客户端访问 API,并且还能够使用类似 RBA C等方式来授权。

    灰度发布:网关完全可以做到对相同服务不同版本的实例进行导流,还可以收集相关的数据。这样对于软件质量的提升,甚至产品试错都有非常积极的意义。

    协议转换:API网关的一大作用在于构建异构系统,API网关作为单一入口,通过协议转换整合后台基于REST、AMQP、Dubbo等不同风格和实现技术的微服务,面向Web Mobile、开放平台等特定客户端提供统一服务。

    指标监控:网关可以统计后端服务的请求次数,并且可以实时地更新当前的流量健康状态,可以对URL粒度的服务进行延迟统计,熔断发生状态记录等。

    限流熔断:在某些场景下需要控制客户端的访问次数和访问频率,一些高并发系统有时还会有限流的需求,网关能够主动进行熔断,保护后端服务,并保持前端用户体验良好。

    日志审计:微服务网关可以作为统一的日志记录和收集器,对服务URL粒度的日志请求信息和响应信息进行拦截。

    API 编排等:网关结合Swagger,可以将后端的微服务暴露给网关,网关作为统一的入口给接口的使用方提供查看后端服务的API规范,不需要知道每一个后端微服务的Swagger地址,这样网关起到了对后端API聚合的效果。

二、网关常见服务组件
  • 根据语言和技术分类

    • Nginx+lua:OpenResty、Kong、Orange、Abtesting gateway 等

    • Java:Zuul/Zuul2、Spring Cloud Gateway、Kaazing KWG、gravitee、Dromara soul 等

    • Go:Janus、fagongzi、Grpc-gateway

    • Dotnet:Ocelot

    • NodeJS:Express Gateway、Micro Gateway

  • 根据流行程度分类

    • OpenResty
    • Kong
    • Zuul、Zuul2
    • Spring Gateway
三、集成Spring Cloud Gateway服务【SpringCloud+Eureka+GateWay+Feign】
  • 1.基于Spring Cloud集成Eureka构建微服务项目_玉言心的博客-优快云博客_springboot集成微服务 新建module,创建spring boot项目

    选择Spring Cloud Routing -> Gateway、Eureka Discovery Client【集合服务注册使用】

    在这里插入图片描述

  • 启动入口新增注解

    @EnableEurekaClient
    @SpringBootApplication
    public class ApiGatewayApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ApiGatewayApplication.class, args);
        }
    
    }
    
  • pom.xml引入父级坐标

    <parent>
          <groupId>com.example</groupId>
          <artifactId>microservice</artifactId>
          <version>0.0.1-SNAPSHOT</version>
    </parent>
    
  • 配置文件

    #自定义微服务名称
    spring:
      application:
        name: api-gateway
      cloud:
        discovery:
          enabled: true
        gateway:
          discovery:
            locator:
              enabled: true #是否与服务中心的发现组件进行整合
              lower-case-service-id: true
          httpclient:
            pool:
              max-connections: 500
              max-idle-time: 10000
          routes:
            # 路由id,可以根据自定义标准设置
            - id: microservice01
              uri: lb://consumer-service/  # 服务提供者在注册中心注册的服务名,通过服务名提供服务
              predicates:
                - Path=/microservice01/** #断言,路径相匹配的进行路由---断言也就是匹配方式,会跳转上面的uri
              filters: 
                - StripPrefix=1
    
      #端口
    server:
      port: 7001
      #根据刚才定义的注册中心的对外暴露的地址填写。
    
    # 需要引入actuator
    management:
      endpoints:
        web:
          exposure:
            include: "*" # 暴露所有端点
    
    # 服务注册
    eureka:
      client:
        service-url:
          default-zone: http://localhost:8761/eureka/
          register-with-eureka: true
          fetch-registry: true
        #每隔3秒拉取最新的注册列表(默认30秒)
        registry-fetch-interval-seconds: 3
      #心跳间隔时间为3秒(默认30秒)
      instance:
        prefer-ip-address: true
        hostname: localhost
    
  • 依次启动服务

    • eureka-server【注册中心】

    • consumer-service【服务消费者】

    • manager-server【服务提供者】

    • api-gateway【api网关】- 本文创建

      在这里插入图片描述

  • 测试结论

    • 通过consumer-service访问

      在这里插入图片描述

    • 通过api-gateway网关访问,通过网关设置的别名microservice01访问

      在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玉言心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值