• 微服务实战微服务网关Gateway入门与实战


    前言

    上一篇:微服务实战|微服务网关Zuul入门与实战

    上文中,我们介绍了微服务网关Zuul,Zuul 是 Netflix 公司开源的产品,被称为第一代网关,也是 Spring Cloud 前几个版本默认使用的一款提供动态路由微服务网关组件,但是随着 Netflix 公司一系列的停更事件,在最新的 Spring Cloud Greenwich 版本中已经不建议采用 Zuul 技术,官方建议使用 Spring Cloud Gateway 作为默认的网关技术。 Spring Cloud Gateway作为第二代网关技术,比Zull更强,官方会一直维护更新下去。

    所以本文需要再介绍一下_Gateway_。

    微服务网关GateWay介绍

    在这里插入图片描述

    Spring Cloud Gateway 是 Spring 体系内的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。

    Spring Cloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代 Netflix Zuul,其不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全、监控/指标和限流。

    GateWay特性介绍

    • 基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0

    • 动态路由

    • Predicates 和 Filters 作用于特定路由

    • 集成 Hystrix 断路器

    • 集成 Spring Cloud DiscoveryClient

    • 易于编写的 Predicates 和 Filters

    • 限流

    • 路径重写

    Gateway 中的相关术语

    • Route(路由):这是网关的基本构建块。它由一个 ID,一个目标 URI,一组断言和一组过滤器定义。如果断言为真,则路由匹配。

    • Predicate(断言):这是一个 Java 8 的 Predicate。输入类型是一个 ServerWebExchange。我们可以使用它来匹配来自 HTTP 请求的任何内容,例如 headers 或参数。

    • Filter(过滤器):这是org.springframework.cloud.gateway.filter.GatewayFilter的实例,我们可以使用它修改请求和响应。

    Gateway实战

    上文中,我们启动了注册中心registry,dms服务,和app服务,以及zuul服务,本文我们将创建gateway服务以替换zuul:

    1、创建项目gateway

    创建子模块gateway ,pom.xml引入eureka-client 和gateway 的依赖

    
        org.springframework.cloud
        spring-cloud-starter-gateway
    
    
    
        org.springframework.cloud
        spring-cloud-starter-netflix-eureka-client
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2、创建启动类

    /**
     * @Author:公众号:程序员965
     * @create 2022-07-02
     **/
    @EnableEurekaClient
    @SpringBootApplication
    public class GateWayApplication {
        public static void main(String[] args) {
            SpringApplication.run(GateWayApplication.class, args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    启动类上增加@EnableEurekaClient以及@SpringBootApplication注解。

    3、新增配置文件

    新增配置文件application.yml

    server:
      port: 8004
    spring:
      application:
        name: gateway
      cloud:
        gateway:
          discovery:
            locator:
              enabled: true
              lower-case-service-id: true
          routes:
            - id: eureka-client-app-1
              uri: lb://app
              predicates:
                - Path=/**
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8001/eureka/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    spring.cloud.gateway.routes路由参数配置说明:

    • id:我们自定义的路由 ID。
    • uri:需要转发的目标服务地址。
    • predicates:路由条件。
    • filters:过滤规则,本示例暂时没用。

    4、编程方式实现路由

    上面路由规则我们也可以使用编程方式来实现,在启动类中增加如下代码,是等效的:

    /**
     * @Author:公众号:程序员965
     * @create 2022-07-02
     **/
    @Configuration
    public class GatewayConfig {
        @Bean
        public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
            RouteLocatorBuilder.Builder routes = builder.routes();
            routes.route("eureka-client-app-1",r -> r.path("/**")
                   .uri("lb://app"))
                    .build();
            return routes.build();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    5、启动验证

    访问Gateway服务的地址:http://localhost:8004/app/index,效果如下:

    在这里插入图片描述

    总结

    本文介绍了如何使用 Spring Cloud Gateway。Gateway 的特性以及两种实现方式:一种是通过配置文件的方式来实现,一种是通过编码的方式来实现,推荐使用配置文件的方式来使用,便于后期修改维护。

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    28 drf-Vue个人向总结-1
    Speedoffice(excel)如何快捷隐藏表格内所有空行
    神网站PaperWithoutCode:举报无法复现的论文,让一作社死??
    Pytest fixture及conftest详解
    计算机毕设(附源码)JAVA-SSM基于框架的旅游管理系统
    Monkey测试
    vue路由
    CCITT 标准的CRC-16检验算法
    机器学习——奇异值分解二(特征分解+SVD纯理解)
    Error: error:0308010C:digital envelope routines::unsupported
  • 原文地址:https://blog.csdn.net/m0_67393619/article/details/126081202