gateway动态路由_微服务中的网关技术:Gateway
技术/杨33
一、Gateway是什么
为微服务提供一种简单有效的统一的API路由管理方式。
Gateway是基于WebFlux框架实现的,而WebFlux框架底层使用了高性能的Reactor模式通讯框架Netty。
二、Gateway的三大核心概念
Route路由、Predicate断言、Filter过滤。
- Route路由
路由是构建网关的基本模块,它由ID、目标URL、一系列的断言和过滤器组成,如果断言为true,则匹配该路由。
- Predicate断言
开发人员可以匹配HTTP请求中的所有内容,例如:请求头或请求参数,如果请求与断言相匹配,则进行路由。
- Filter过滤
指的是Spring中的GatewayFilter的实例,使用过滤器,可以在请求被路由前或之后对请求进行修改。
三、网关Gateway的工作流程
客户端向Spring Cloud Gateway发出请求,然后在Gateway Handler Mapping中找到与请求相匹配的路由,将其发送到Gateway Web Handler。Handler再通过指定的过滤器链,将请求发送到我们实际的服务执行业务逻辑,然后返回。
四、Java代码编码体验
1、pom.xml文件依赖包配置
org.springframework.cloud
spring-cloud-starter-gateway
2、application.yml配置文件
server:
port: 9527
spring:
application:
name: cloud-gateway
cloud:
gateway:
routes:
- id: paymentRoute1 #路由的id,没有固定的规则,但要求唯一
uri: http://localhost:8001 #匹配后提供服务的路由地址
predicates:
- Path=/payment/getPayment/** #断言,路径相匹配的进行路由
eureka:
client:
register-with-eureka: true #true表示向注册中心注册自己
fetch-registry: true #是否从EurekaServer抓取已有的注册信息
service-url:
#defaultZone: http://localhost:7001/eureka/ #单机服务注册中心的地址
defaultZone: http://eureka7001.com:7001/eureka/ #集群服务
3、添加主启动类
@SpringBootApplication
@EnableEurekaClient
public class GatewayMain9527 {
public static void main(String[] args) {
SpringApplication.run(GatewayMain9527.class, args);
}
}
4、分别启动服务注册中心服务cloud-eureka-server7001、服务提供者服务cloud-provider-payment8001、网关服务cloud-gateway-gateway9527
访问接口:
5、网关gateway通过注册中心的微服务名称,动态路由服务提供者的接口
修改application.yml配置文件
server:
port: 9527
spring:
application:
name: cloud-gateway
cloud:
gateway:
discovery:
locator:
enabled: true #开启从注册中心动态创建路由的功能,利用微服务名进行路由
routes:
- id: paymentRoute1 #路由的id,没有固定的规则,但要求唯一
uri: lb://cloud-provider-payment #微服务名称
predicates:
- Path=/payment/getPayment/** #断言,路径相匹配的进行路由
eureka:
client:
register-with-eureka: true #true表示向注册中心注册自己
fetch-registry: true #是否从EurekaServer抓取已有的注册信息
service-url:
#defaultZone: http://localhost:7001/eureka/ #单机服务注册中心的地址
defaultZone: http://eureka7001.com:7001/eureka/ #集群服务
五、gateway的核心之一:Predicate断言,常用类型
官网上可以看到所有的类型:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.2.RELEASE/reference/html/#gateway-request-predicates-factories
- After=2017-01-20T17:42:47.789-07:00[America/Denver]
这样的时间串生成方式:
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println(zonedDateTime);
六、gateway的核心之一:Filter过滤
- gatewayfilter-factories
官网上可以看到所有的类型:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.2.RELEASE/reference/html/#gatewayfilter-factories
包含30种类型:
- global-filters
官网上可以看到所有的类型:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.2.RELEASE/reference/html/#global-filters
七、自定义过滤器Filter,实际工作用这个比较多
新建Java类,需实现接口GlobalFilter, Ordered
package com.cloud.filter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
/**
* @author 杨33
* @date 2020/5/1 20:56
*/
@Component
public class MyGatewayFilter implements GlobalFilter, Ordered {
/**
* 过滤方法
* @param exchange
* @param chain
* @return
*/
@Override
public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String serial = exchange.getRequest().getQueryParams().getFirst("serial");
if (serial == null) {
System.out.println("serial名是非法的");
exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
return exchange.getResponse().setComplete();
}
return chain.filter(exchange);
}
@Override
public int getOrder() {
return 0;
}
}
这样的代码,就可以过滤掉请求参数只要不是serial,那么不能完成正确的请求。
作者:杨33,北京互联网公司在职Java开发,专注分享写作干货。欢迎关注我,期待你的点赞评论。
gateway动态路由_微服务中的网关技术:Gateway相关推荐
- gateway动态路由_微服务与网关技术(SIA-GateWay)
一.背景 软件架构,总是在不断的演进中... 把时间退回到二十年之前,当时企业级领域研发主要推崇的还是C/S模式,PB.Delphi这样的开发软件是企业应用开发的主流.随着时间的推移,基于浏览器的B/ ...
- nginx工作笔记005---nginx配置负载均衡_在微服务中实现网关集群_实现TCP传输层协议__http协议的负载均衡
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 我们在微服务中,由于网关的存在,后来,在nginx中都不需要在配置其他服务的地址了,只需要,配置一 ...
- python 微服务 网关_微服务中的 API 网关(API Gateway)
我们知道在微服务架构风格中,一个大应用被拆分成为了多个小的服务系统提供出来,这些小的系统他们可以自成体系,也就是说这些小系统可以拥有自己的数据库,框架甚至语言等,这些小系统通常以提供 Rest Api ...
- iframe的src动态修改并刷新_微服务中配置中心Config+消息总线Bus,实现分布式自动刷新配置
技术/杨33 一.分布式配置中心Config 一套集中的.动态的配置管理,实现统一配置微服务中的每个子服务. Spring Cloud Config为微服务架构提供了集中化的外部配置支持,配置服务器为 ...
- gateway动态路由_无语!SpringCloud Gateway动态路由之Nacos,我已经讲得很清楚了
前言 当我们的网关Gateway程序开发完成之后,需要部署到生产环境,这个时候你的程序不能是单点运行的,肯定是多节点启动(独立部署或者docker等容器部署),防止单节点故障导致整个服务不能访问,网关 ...
- 降低代码执行中得内存消耗_微服务中使用 OpenJ9 JVM内存占用降低60%!
专注于Java领域优质技术,欢迎关注 作者: 陈一乐 来自:陈一乐 随着微服务的普及,许多企业踏上微服务之旅. 微服务化后,应用数量可能高一个数量级.一般企业,以前三五个应用能支撑业务,微服务化之后应 ...
- 微服务中的网关到底是个什么鬼?
前言 假设你正在开发一个电商网站,那么这里会涉及到很多后端的微服务,比如会员.商品.推荐服务等等. 那么这里就会遇到一个问题,APP/Browser怎么去访问这些后端的服务? 如果业务比较简单的话,可 ...
- 微服务中API网关的作用是什么?
目录 什么是API网关? 为什么要用API网关? API网关架构 API网关是如何实现这些功能的? 协议转换 链式处理 异步请求 什么是API网关? Api网关是微服务的重要组成部分,封装了系统内部的 ...
- SpringCloud微服务架构之,Hystrix 熔断器,Gateway 网关
Hystrix 概述 Hystix 是 Netflix 开源的一个延迟和容错库,用于隔离访问远程服务.第三方库,防止出现级联失败(雪崩). pom依耐 <!-- hystrix -->&l ...
最新文章
- linux shell脚本字符串连接符,学习Linux shell脚本中连接字符串的方法
- 推荐3个快速开发平台 前后端都有 项目经验又有着落了
- 八十、归并排序及其分而治之思想
- 在 Vue 中正确使用 防抖 和 节流
- 关于Web报表FineReport打印的开发应用案例
- 树莓派更换软件源提高下载速度
- TWRP-recovery中文界面安装方法[转]
- struct与typedef 结构体定义
- Silverlight 3一瞥
- Xcode7 低版本iOS系统上下有黑边的问题
- C中使用memset
- alias 为命令定义别名、unalias删除别名
- 国外RSGIS权威期刊杂志
- EXCEL数组公式(6),注意聚合函数在数组公式中的用法
- 《iRedMail邮件服务器搭建详细过程》
- 笔记本电脑插耳机后耳机无声音有外放情况,咋办??
- 用拉格朗日插值法,牛顿插值和分段线性插值计算近似值
- Windows Server 2016 (Updated Feb 2018) (x64)下载
- 安卓手机软件性能测试,手机性能评测软件
- Chuck语言学习笔记——0.前言:我为什么要学习这门语言