软件编程
位置:首页>> 软件编程>> java编程>> SpringCloud超详细讲解微服务网关Gateway

SpringCloud超详细讲解微服务网关Gateway

作者:_时光煮雨  发布时间:2021-09-11 14:54:49 

标签:SpringCloud,微服务网关,Gateway

前言

上一篇:微服务网关Zuul

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

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

微服务网关GateWay介绍

SpringCloud超详细讲解微服务网关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 的依赖

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

2、创建启动类

@EnableEurekaClient
@SpringBootApplication
public class GateWayApplication {
   public static void main(String[] args) {
       SpringApplication.run(GateWayApplication.class, args);
   }
}

启动类上增加以及注解。

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/

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

  • id:我们自定义的路由 ID。

  • uri:需要转发的目标服务地址。

  • predicates:路由条件。

  • filters:过滤规则,本示例暂时没用。

4、编程方式实现路由

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

@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();
   }
}

5、启动验证

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

SpringCloud超详细讲解微服务网关Gateway

来源:https://coder965.blog.csdn.net/article/details/125590198

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com