Springboot 整合 SpringCloud组件-Gateway 网关服务 (四)

这篇我将介绍的是网关服务,那么从标题已经知道我们整合的组件时gateway;

也许有人说,为啥不用zuul,这个组件也可以用于做网关。 至于这两组件的性能比较与区别,我们来看一个表格简单了解下:

Gateway与Zuul

  gateway zuul
基本介绍 Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。Spring Cloud Gateway作为Spring Cloud生态系中的网关,目标是替代Netflix ZUUL,其不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例如:安全,监控/埋点,和限流等。
 
Zuul1 是基于 Servlet 框架构建,如图所示,采用的是阻塞和多线程方式,即一个线程处理一次连接请求,这种方式在内部延迟严重、设备故障较多情况下会引起存活的连接增多和线程增加的情况发生。
性能 WebFlux 模块的名称是 spring-webflux,名称中的 Flux 来源于 Reactor 中的类 Flux。Spring webflux 有一个全新的非堵塞的函数式 Reactive Web 框架,可以用来构建异步的、非堵塞的、事件驱动的服务,在伸缩性方面表现非常好。使用非阻塞API。 Websockets得到支持,并且由于它与Spring紧密集成,所以将会是一个更好的 开发 体验。  本文的Zuul,指的是Zuul 1.x,是一个基于阻塞io的API Gateway。Zuul已经发布了Zuul 2.x,基于Netty,也是非阻塞的,支持长连接,但Spring Cloud暂时还没有整合计划。
源码维护组织 spring-cloud-Gateway是spring旗下spring-cloud的一个子项目。还有一种说法是因为zuul2连续跳票和zuul1的性能表现不是很理想,所以催生了spring孵化Gateway项目。 zuul则是netflix公司的项目,只是spring将zuul集成在spring-cloud中使用而已。关键目前spring不打算集成zuul2.x。
版本 springboot2.0 springboot1.x

接下来我们开始整合gateway,实现该组件的基础使用:

创建一个springboot项目,起名 gateway:

Springboot 整合 SpringCloud组件-Gateway 网关服务 (四)_第1张图片

(同样,我们这里选用的springcloud版本是:Finchley.RELEASE) 

pom.xml里核心的依赖包为:


		
			org.springframework.boot
			spring-boot-starter
		
		
			org.springframework.cloud
			spring-cloud-starter-netflix-eureka-client
			2.0.0.RELEASE
		
		
			org.springframework.cloud
			spring-cloud-starter-gateway
			2.0.0.RELEASE
		

		
			org.springframework.boot
			spring-boot-starter-test
			test
		

实现基础功能使用,我们可以直接在application.yml进行配置:


server:
  port: 8081

spring:
  application:
    name: test-gateway-service
  cloud:
      gateway:
        discovery:
          locator:
            enabled: false
#开启小写验证,默认feign根据服务名查找都是用的全大写
            lowerCaseServiceId: true
        routes:
        - id: client-test
          uri: lb://CLIENT-TEST
          predicates:
            - Path=/testclient/**
          filters:
            - StripPrefix=1
        - id: service-feign
          uri: lb://FEIGN
          predicates:
            - Path=/service-feign/**
          filters:
            - StripPrefix=1
eureka:
  instance:
    preferIpAddress: true
    instance-id: ${spring.cloud.client.ip-address}:${server.port}
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/


启动类也同样加上 @EnableEurekaClient。

 

可以看到我们简单配置了2个路由:

路由id为client-test的,

只要是访问路径带有 /testclient的, 都会根据从Eureka注册中心获取的服务信息去寻找储服务名为CLIENT-TEST的服务实例,进行接口转发调用。

路由id为service-feign的,

同理,只要是访问路径带有 /service-feign的, 都会根据从Eureka注册中心获取的服务信息去寻找储服务名为FEIGN的服务实例,进行接口转发调用。

 

那么我们先把网关gateway服务跑起来,逐一调用接口看看:

 访问:http://localhost:8081/testclient/haveatry?name=JCccc

Springboot 整合 SpringCloud组件-Gateway 网关服务 (四)_第2张图片

访问: http://localhost:8081/service-feign/feignTest?name=TestMessage

Springboot 整合 SpringCloud组件-Gateway 网关服务 (四)_第3张图片

可以看到通过网关访问,路由转发都是OK的。 

你可能感兴趣的:(Gateway,springcloud,springboot,Springcloud,跟我一起玩转,SpringBoot,带你从零掌握,SpringCloud)