微服务网关:SpringCloud Gateway保姆级入门教程

什么是微服务网关

SpringCloud Gateway是Spring全家桶中一个比较新的项目,Spring社区是这么介绍它的:

该项目借助Spring WebFlux的能力,打造了一个API网关。旨在提供一种简单而有效的方法来作为API服务的路由,并为它们提供各种增强功能,例如:安全性,监控和可伸缩性。

而在真实的业务领域,我们经常用SpringCloud Gateway来做微服务网关,如果你不理解微服务网关和传统网关的区别,可以阅读此篇文章 Service Mesh和API Gateway关系深度探讨 来了解两者的定位区别。

以我粗浅的理解,传统的API网关,往往是独立于各个后端服务,请求先打到独立的网关层,再打到服务集群。而微服务网关,将流量从南北走向改为东西走向(见下图), 微服务网关和后端服务是在同一个容器中的 ,所以也有个别名,叫做Gateway Sidecar。

微服务网关:SpringCloud Gateway保姆级入门教程_第1张图片

为啥叫Sidecar,这个词应该怎么理解呢,吃鸡里的三蹦子见过没:

微服务网关:SpringCloud Gateway保姆级入门教程_第2张图片

摩托车是你的后端服务,而旁边挂着的额外座椅就是微服务网关,它是依附于后端服务的(一般是指两个进程在同一个容器中),是不是生动形象了一些。

由于本人才疏学浅,对于微服务相关概念理解上难免会有偏差。就不在此详细讲述原理性的文字了。

本文只探讨SpringCloud Gateway的入门搭建和实战踩坑。如果小伙伴们对原理感兴趣,可以等后续原理分析文章。

注:本文网关项目在笔者公司已经上线运行,每天承担百万级别的请求,是经过实战验证的项目。

文章目录

  • 手把手造一个网关
    • 引入pom依赖
    • 编写yml文件
    • 接口转义问题
    • 获取请求体(Request Body)
  • 踩坑实战
    • 获取客户端真实IP
    • 尾缀匹配
  • 总结

源代码

完整项目源代码已经收录到我的Github:

https://github.com/qqxx6661/springcloud_gateway_demo

手把手造一个网关

引入pom依赖

我使用了spring-boot 2.2.5.RELEASE作为parent依赖:


    org.springframework.boot
    spring-boot-starter-parent
    2.2.5.RELEASE
     

在dependencyManagement中, 我们需要指定sringcloud的版本 ,以便保证我们能够引入我们想要的SpringCloud Gateway版本,所以需要用到dependencyManagement:


    
        
            org.springframework.cloud
            spring-cloud-dependencies
            Hoxton.SR8
            pom
            import
        
    

最后,是在dependency中引入
spring-cloud-starter-gateway:


    org.springframework.cloud
    spring-cloud-starter-gateway

如此一来,我们便引入了2.2.5.RELEASE版本的网关:

微服务网关:SpringCloud Gateway保姆级入门教程_第3张图片

此外,请检查一下你的依赖中是否含有spring-boot-starter-web,如果有, 请干掉它 。因为我们的SpringCloud Gateway是一个netty+webflux实现的web服务器,和Springboot Web本身就是冲突的。


	org.springframework.boot
	spri

你可能感兴趣的:(java,开发语言,spring,cloud,微服务)