SpringCloud(四)——从什么是服务网关到SpringCloud Gateway

这里写目录标题

  • SpringCloud服务网关——SpringCloud Gateway
      • 服务网关简介简介
        • 什么是服务网关?
        • 网关的作用?
        • Zuul和Gateway
      • SpringCloud Gateway 服务网关
        • 服务网关执行步骤
        • SpringCloud Gateway实例演示
          • eureka注册中心
          • producer 服务提供者
          • SpringCloud Gateway 服务网关
          • 启动服务测试

SpringCloud服务网关——SpringCloud Gateway

服务网关简介简介

什么是服务网关?


简单理解服务网关就是一个网络关口、通道,是整个服务的统一入口。
所有客户端、消费端的请求都通过统一的网关接入服务。
SpringCloud(四)——从什么是服务网关到SpringCloud Gateway_第1张图片

网关的作用?


为微服务云平台提供统一的入口是API网关最主要的用途,除此之外,网关还可承担认证授权、访问控制、路由、负载均衡、缓存、日志、限流限额、转换、映射、过滤、熔断、注册、服务编排、API管理、监控、统计分析等等非业务性的功能。

  • 负载均衡 网关接收外部请求后,可以对请求进行负载均衡转发(随机、轮询、权重、hash),避免将所有请求打到同一个服务上。
  • 服务熔断 和Hystrix一样的原理,监控注册中心,如果发现当前某个服务不可用或多次调用某个服务失败(短时间内打到阈值),可以快速失败,防止雪崩效应。
  • 限流 限流的主要目的是防止类似DDos的恶意攻击导致服务器瘫痪。常见的限流算法有:滑动窗口限流、漏斗限流、令牌桶限流。
  • 认证鉴权 服务网关作为用户请求的统一入口,会拦截用户请求并对用户进行鉴权认证。
  • 其他功能暂不叙述

Zuul和Gateway

SpringCloud Finchley 版本出来之前使用的服务网关是 Zuul,Finchley开始使用官方的SpringCloud Gateway。

  • Zuul 可以提供动态路由、监视、安全性等功能的边缘服务,是一个基于JVM路由和服务端的负载均衡器。Zuul.1版本的编程模型是同步阻塞,Zuul.2开始使用异步调用,SpringCloud只集成了Zuul.1 并没有使用Zuul.2 。
  • SpringCloud Gateway 基于Java 8 编码、基于springboot2,是SpringCloud官方服务网关项目。官方的测试报告中,SpringCloud Gateway的RPS是Zuul的1.6倍

SpringCloud Gateway 服务网关

服务网关执行步骤

  • 初始化配置,在加入SpringCloud Gateway依赖后,服务启动后会自动加载初始化相关的类,主要有:微服务注册发现自动配置类,Redis自动配置类(鉴权和限流),GatewayAutoConfiguration 核心配类(配置路由规则、过滤器等)。
  • 请求发送到网关,DispatcherHandler是HTTP请求的中央分发器,核心方法handler将请求匹配到相应的HandlerMapping。
  • 请求与处理器之间有一个映射关系,也就是这个请求应该映射到哪个服务中,网关会对请求进行路由
  • 随后进入网关的Web处理器WebHandler,它是一系列网关过滤器和全局过滤器的实例,对请求进行过滤和封装
  • 将封装后的请求转发到对应的服务中

SpringCloud(四)——从什么是服务网关到SpringCloud Gateway_第2张图片

SpringCloud Gateway实例演示

eureka注册中心

沿用之前的eureka server

producer 服务提供者

沿用之前的producer服务提供者,这里新增一个接口:

@RestController
@RequestMapping("/producer")
@Api(description = "producer,provide service")
@Slf4j
public class ProducerController {

    @ApiOperation(value = "response to gateway",notes = "gateway")
    @GetMapping("/gateway")
    public String gateRes(){
        return "hello gateway ,I`m producer !";
    }
}
SpringCloud Gateway 服务网关

添加服务依赖:

    
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
        

        
            org.springframework.boot
            spring-boot-starter-webflux
        

        
            org.springframework.cloud
            spring-cloud-gateway-core
            2.0.3.RELEASE
        

    
    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            
        
    

在启动类中加上 @EnableDiscoveryClient 注解将网关注册到eureka server。

在application.yml配置文件中配置路由规则:这里配置了一个id为gateway-service的路由,所有访问 /producer/**路径的请求将被转发到
http://localhost:10011/producer

server:
  port: 10061

spring:
  application:
    name: gateway-server
  cloud:
    gateway:
      routes:
      - id: gateway-service
        uri: http://localhost:10011/producer
        predicates:
          - Path=/producer/**

eureka:
  instance:
    ip-address: true
    instance-id: gateway
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://luht:[email protected]:8761/eureka/
启动服务测试

SpringCloud(四)——从什么是服务网关到SpringCloud Gateway_第3张图片

可以看到服务已经注册打eureka server中。

直接访问producer服务的gateway接口:

SpringCloud(四)——从什么是服务网关到SpringCloud Gateway_第4张图片


通过服务网关来访问:

SpringCloud(四)——从什么是服务网关到SpringCloud Gateway_第5张图片

你可能感兴趣的:(微服务)