极速体验 SpringCloud Gateway
欢迎访问我的 GitHub
这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos
Spring Cloud Gateway 是 Spring Cloud 技术栈中的网关服务,本文实战构建一个 SpringCloud 环境,并开发一个 SpringCloud Gateway 应用,快速体验网关服务;
环境信息
操作系统:win10(64 位)
JDK:1.8.0_181
Maven:3.5.0
Spring Cloud:Greenwich.SR
源码下载
如果您不打算写代码,也可以从 GitHub 上下载本次实战的源码,地址和链接信息如下表所示:
这个 git 项目中有多个文件夹,本章的源码在 gatewaydemo 文件夹下,如下图红框所示:
整体设计
本次实战的源码涉及到三个应用:注册中心、服务提供者、网关,它们的关系和业务逻辑如下图:
整个工程基于 maven 构建,采用父子结构,父工程名为 gatewaydemo,里面有三个 modular,分别是:eureka()注册中心)、provider(服务提供者)、网关(gateway),在 IDEA 上呈现的结构如下图所示:
准备完毕,开始编码吧;
创建父工程
创建名为 gatewaydemo 的 maven 工程,pom.xml 内容如下,这是个典型的父子工程 pom,dependencyManagement 节点接管了版本匹配:
如果您是用 IDEA 创建的工程,那么 IDEA 可能会在 pom.xml 所在目录自动创建 src 文件夹,请手动将其删除,因为用不上;
eureka 工程
接下来是创建注册中心,鼠标右键点击 gatewaydemo 文件夹,选择"New -> Module":
在弹出窗口选择 Spring Initializr ,如下图:
接下来的窗口填写 Group、Artifact(这里是 eureka)、Version 等信息,其余的默认,即可完成子工程的创建;
新的 eureka 模块的 pom.xml,请修改成如下内容,可见除了指定父工程,还依赖了 spring-cloud-starter-netflix-eureka-server :
src\main\resources 目录下新增 application.yml 文件,内容如下,这是普通的注册中心设置:
java 文件只有一个,就是启动类,还通过注解 EnableEurekaServer 开启了注册中心服务:
以上就是注册中心 eureka 的内容,运行 EurekaApplication 即可启动服务,访问 8080 端口的结果如下:
现在注册中心已经就绪,开始编写服务提供者 provider 应用的代码吧。
provider 工程
在 gatewaydemo 下创建一个子工程,名为 provider,pom.xml 内容如下,可见用到了 spring-boot-starter-web 和 spring-cloud-starter-netflix-eureka-client 这两个依赖,分别用来支持 web 服务和注册发现:
配置文件 application.yml 如下,指定了注册中心地址,并且自身端口为 8081:
启动类 ProviderApplication.java:
增加一个 controller,用于响应 web 请求,注意 hello 方法会从请求的 header 中取出名为 extendtag 的属性值,返回给浏览器:
启动应用,再次刷新 eureka 的页面 localhost:8080,可见 provider 应用已经注册上去了,如下图红框所示:
访问地址:http://localhost:8081/hello/time ,这是 controller 提供的 web 服务接口,得到响应如下图,因为 header 中没有名为"extendtag"的属性,因此返回了 null:
提供服务的 provider 已经 OK,可以开发网关服务了;
gateway 工程
在 gatewaydemo 下创建一个子工程,名为 gateway,pom.xml 内容如下,可见用到了 spring-cloud-starter-gateway 和 spring-cloud-starter-netflix-eureka-client 这两个依赖,分别用来支持网关服务和注册发现:
配置文件 application.yml 如下,指定了注册中心地址,并且自身端口为 8082,还有开启了网关服务:
启动类 GatewayApplication .java,可见实例化了一个 RouteLocator,该实例就是路由规则,具体的功能请参考代码中的注释:
启动应用,再次刷新 eureka 的页面 localhost:8080,可见 gateway 应用已经注册上去了,如下图红框所示:
访问地址:http://localhost:8082/customize/hello/time ,这是符合前面我们配置的路由规则的路径,customize 被删除掉之后,将剩余的路径转发到 provider 服务,于是请求的真正地址就是 provider 服务的/hello/time,得到响应如下图,因为 gateway 在转发的时候给 header 中设置了名为"extendtag"的属性,因此返回了 extendtag 是有内容的:
至此,极速体验 SpringCloud Gateway 的实战就完成了,这里我们只简单的体验了 Gateway 的一些基本功能,希望本文能帮助您快速搭建环境和开发应用,其实该框架的功能是非常强大的,如果您有兴趣建议从官网的 API 文档入手深入学习。
欢迎关注 InfoQ:程序员欣宸
版权声明: 本文为 InfoQ 作者【程序员欣宸】的原创文章。
原文链接:【http://xie.infoq.cn/article/0a3e85eebf2e95dd5591dc9c0】。文章转载请联系作者。
评论