SpringCloud 微服务网关Gateway介绍及简单路由配置
概述:什么是微服务网关?为了解决用户客户端在调用微服务系统中的多个消费者工程接口时,需要维护非常多的消费者应用接口地址等信息,以及可能存在不同应用见的调用跨域等问题,微服务网关组件随即出现。网关作为用户客户端和微服务接口之间的一个统一路由及其他功能的组件,方便了用户客户端请求接口时不用去关注不同接口的地址路径等。只需要统一调用网关的服务即可。微服务网关为一个服务器服务,是系统对外的唯一入口。网关可以提供身份验证、监控、负载均衡、缓存、请求分片与管理、等功能。
一、Gateway 简介
微服务网关比较流行的有Zuul和Gateway。Gateway作为Spring Cloud生态系统中的网关,目标是替代Netfix Zuul,其基于filter链的方式在提供了基本的路由之外,还提供了网关的其他功能,如:安全、监控/埋点,和限流等。他是基于Netty的响应式开发模式。
gateway 与 zuul rps 对比。可以看出 Gateway 的RPS 几乎为Zuul 的 1.6倍。
组件 | RPS(request per second) |
Spring Cloud Gateway | 32212.38 |
Netfix Zuul1x | 20800.13 |
Gateway 核心概念:
1,路由(routes)路由为网关最基础功能,Gateway网关路由信息由一个ID、一个目的URL、一组断言工厂和一组Filter组成,如果断言为真,则会对改请求路由到对应的url上。
2,断言(predicates) Java8中的断言函数,SpringCloud Gateway中的断言函数允许开发者去定义匹配来自用户端的请求request中的任何信息,如请求参数和Header中的信息。
3,过滤器(Filters) 一个标准的Spring webFilter,SpringCloud Gateway中的过滤器分为两种,针对服务的Gateway Filter 和全局的Global Filter。过滤器可以对请求和响应进行处理。
二、简单路由配置
准备步骤:
创建maven子工程
pom文件引入Gateway依赖
创建主启动类
编写配置文件
1,父工程pom.xml 文件如下:
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.xiaohui.springCloud</groupId><artifactId>SpringCloud</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.2.RELEASE</version></parent><modules><module>product_service</module><module>order_service</module><module>cloud-api-common</module><module>eureka_server</module><module>eureka_server2</module><module>cloud-import-test</module><module>consul_product_service</module><module>consul_order_service</module><module>openfeign_order_service</module><module>hystrix_order_service_ipconn</module><module>hystrix_order_service_rest</module><module>hystrix-turbine</module><module>sentinel_order_service_rest</module><module>sentinel_order_service_feign</module><module>api_gateway_server</module></modules><!-- 统一jar包管理 --><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><junit.version>4.12</junit.version><log4j.version>1.2.17</log4j.version><lombok.version>1.16.18</lombok.version><mysql.version>5.1.47</mysql.version><druid.version>1.1.16</druid.version><mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version></properties><!-- 子模块继承之后,提供作用:锁定版本+子模块不用写groupId和version --><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Hoxton.SR1</version><type>pom</type><scope>import</scope></dependency><!-- springcloud alibaba --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.1.0.RELEASE</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>${druid.version}</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis.spring.boot.version}</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version><optional>true</optional></dependency></dependencies></dependencyManagement><build><plugins><!-- maven 插件 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><fork>true</fork><addResources>true</addResources></configuration></plugin></plugins></build>
</project>
2,创建子模块maven工程,并引入gateway依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>SpringCloud</artifactId><groupId>com.xiaohui.springCloud</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>api_gateway_server</artifactId><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency></dependencies>
</project>
3,创建主启动类
package com.xiaohui.gateway;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class GatewayServerApplication {public static void main(String[] args) {SpringApplication.run(GatewayServerApplication.class,args);}
}
4,编写配置文件
server:port: 8080
spring:application:name: api-gateway-server #服务名称cloud:gateway:routes:#配置路由: 路由id,路由到微服务的uri,断言(判断条件)- id: product-service #保持唯一uri: http://127.0.0.1:8001 #目标为服务地址predicates:- Path=/payment/** #路由条件 path 路由匹配条件
在配置文件中,我们断言位置配置了一个当访问网关时以 /payment/开始的请求时都会转发到uri 配置的地址127.0.0.1:8001上。
5,启动测试
我们首先保证我们的8001服务正常启动,以及再启动gateway 网关服务。都启动成功后我们访问 http://127.0.0.1:8080/payment/get/1 则会转发到 http://127.0.0.1:8001/payment/get/1 服务地址上。
至此最简单的gateway 服务我们搭建完成,并实现了最简单的服务路由功能。
三、其他路由配置规则:
在上面第二部分我们使用了比较简单的-Path 路径匹配规则,进行了服务路由。SpringCloud Gateway 处理路径匹配之外还有很多其他的匹配规则,比如请求参数、时间等,如下:
例如如下表示:2028年xxxx 时间之后的可以被路由转发。
spring: cloud:gateway:routes:#配置路由: 路由id,路由到微服务的uri,断言(判断条件)- id: product-service #保持唯一uri: http://127.0.0.1:8001 #目标为服务地址predicates:- After=2028-03-18T17:32:58.129+08:00[Asia/Shanghai] #路由条件 After 路由匹配条件
参考:https://docs.spring.io/spring-cloud-gateway/docs/2.2.7.RELEASE/reference/html/#gateway-request-predicates-factories
SpringCloud 微服务网关Gateway介绍及简单路由配置相关推荐
- SpringCloud 微服务网关Gateway 动态路由配置
概述:在上一章节<SpringCloud 微服务网关Gateway介绍及简单路由配置>中我们讲述了Gateway的最简单的路由配置方式.但是其中比较明显的问题就是我们在配置路由服务的地址时 ...
- SpringCloud—— 微服务网关GateWay
目录 1.GateWay网关概述 1.1.什么是GateWay? 1.2.为什么要使用微服务网关? 1.3.Zuul与GateWay网关的区别? 2.快速入门 2.1.创建项目 2.2.配置yml文件 ...
- Spring Cloud之(十八)微服务网关GateWay
十八.微服务网关GateWay Zuul 1.x 是一个基于阻塞 IO 的 API Gateway 以及 Servlet:直到 2018 年 5 月,Zuul 2.x(基于Netty,也是非阻塞的,支 ...
- 微服务网关Gateway实战
1. 什么是Spring Cloud Gateway 网关作为流量的入口,常用的功能包括路由转发,权限校验,限流等. Spring Cloud Gateway 是Spring Cloud官方推出的第二 ...
- SpringCloud微服务的概念介绍
文章目录 一.微服务相关概念 1.什么是微服务? 2.微服务与单体架构区别 二.Spring Cloud相关概念 1.什么是Spring Cloud? 2.Spring Cloud和SpringBoo ...
- 微服务网关GateWay 过滤+路由+限流
文章目录 1 微服务网关概述 2 微服务网关微服务搭建 3 微服务网关跨域 4 微服务网关过滤器 5 微服务网关限流 5.1 思路分析 5.2 令牌桶算法 5.3 网关限流代码实现 1 微服务网关概述 ...
- 微服务网关Gateway
使用场景 不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题: 客户端会多次请求不同的微服务,增加了客户端 ...
- Spring-Cloud 微服务网关Zuul、ZuulFilter过滤器和限流
微服务网关 一. Zuul网关 1. 创建工程 并导入依赖 2. application.yml 配置文件 3. 启动类添加注解 4. 依次启动服务 5. 进入浏览器访问测试 二. ZuulFilte ...
- springcloud 服务网关Zuul实战(一)基本路由配置
上篇我们介绍了zuul是什么?大家已经有些了解,废话不多说我们就开始实际代码演示下zuul如何配置 一,新建一个路由网关的微服务 microservicecloud-zuul-gateway-9527 ...
最新文章
- fire.php,Fire PHP
- CENTOS/RHEL 7 系统中设置SYSTEMD SERVICE的ULIMIT资源限制
- Tensorflow之调试(Debug) tf.py_func()
- PG基于pgpool-II实现读写分离和负载均衡
- DM8168 unrecoverable error: OMX_ErrorBadParameter (0x80001005) [resolved]
- f77编程和c语言的区别,在fortran中l用F77编译器编译程序时出现问题?
- Vue 打包静态文件路径设置
- 【C++】【GADL】读取栅格数据获取信息
- python代码混淆工具_Intensio-Obfuscator:一款专业Python代码混淆处理工具
- FastDFS原理及入门
- Shiro反序列化漏洞检测及修复(工具分享)
- codeforces:E1. Divisible Numbers (easy version)【数论 + 复杂度计算 + 分解质因数】
- Cortex M3 Bit-banding简介
- 纯css绘制齿轮加载动画
- android协议分析,对一个apk的协议分析
- FPGA实现千兆/百兆自适应以太网UDP传输
- 使用Ultra Librarian把bxl文件转为CAD Capture CIS的原理图库及Allegro的PCB封装库
- SMETA验厂辅导,贸易公司、物流仓储公司是否可以申请SMETA审核
- 火车头定制规则php什么意思,火车头采集规则定制 - 92Game.Net
- 【数学基础】最简分数
热门文章
- Python使用BeautifulSoup爬取网页中主体部分的内容,并导出为pdf格式
- 【转载】Kerberos原理--经典对话
- Spring定时任务并行(异步)处理
- 单片机学c语言还是python好_单片机开发用哪种语言最好?
- @Repository详解
- 接口与抽象类区别和接口jdk8新特性
- 北京理工大学计算机系郭伟,【记忆辉煌2014】品学兼优榜样——郭伟(2012级研究生)...
- java的mysql语句规范_常用的标准SQL 语句
- 使用recyclerView实现无限循环banner效果
- ZooKeeper学习第四期---构建ZooKeeper应用