位置: IT常识 - 正文

微服务网关Gateway实践总结(微服务网关作用)

编辑:rootadmin
有多少请求,被网关截胡; 一、Gateway简介 微服务架构中,网关服务通常提供动态路由,以及流量控制与请求识别等核心能力,在之前的篇幅中有说过Zuul组件的使用流程,但是当下Gateway组件是更常规的选择,下面就围绕Gateway的实践做详细分析; 从架构模式上看,网关不管采用什么技术组件,都是 ...

推荐整理分享微服务网关Gateway实践总结(微服务网关作用),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:微服务网关gateway作用,微服务网关有哪些,微服务网关和api网关的区别,微服务网关作用,微服务网关gateway简书,微服务网关gateway作用,微服务网关gateway性能优化,微服务网关gateway作用,内容如对您有帮助,希望把文章链接给更多的朋友!

有多少请求,被网关截胡;

一、Gateway简介

微服务架构中,网关服务通常提供动态路由,以及流量控制与请求识别等核心能力,在之前的篇幅中有说过Zuul组件的使用流程,但是当下Gateway组件是更常规的选择,下面就围绕Gateway的实践做详细分析;

从架构模式上看,网关不管采用什么技术组件,都是在客户端与业务服务中间提供一层拦截与校验的能力,但是相比较Zuul来说,Gateway提供了更强大的功能和卓越的性能;

基于实践的场景来看,在功能上网关更侧重请求方的合法校验,流量管控,以及IP级别的拦截,从架构层面看,通常需要提供灵活的路由机制,比如灰度,负载均衡的策略等,并基于消息机制,进行系统级的安全通知等;

下面围绕客户端、网关层、门面服务的三个节点,分析Gateway的使用细节,即客户端向网关发出请求,经过网关路由到门面服务处理;

二、动态路由1、基础概念

路由:作为网关中最核心的能力,从源码结构上看,包括ID、请求URI、断言集合、过滤集合等组成;

public class RouteDefinition {private String id;private URI uri;private List<PredicateDefinition> predicates = new ArrayList<>();private List<FilterDefinition> filters = new ArrayList<>();}微服务网关Gateway实践总结(微服务网关作用)

断言+过滤:通常在断言中定义请求的匹配规则,在过滤中定义请求的处理动作,结构上看都是名称加参数集合,并且支持快捷的方式配置;

public class PredicateDefinition {private String name;private Map<String, String> args = new LinkedHashMap<>();}public class FilterDefinition {private String name;private Map<String, String> args = new LinkedHashMap<>();}2、配置路由

以配置的方式,添加facade服务路由,以路径匹配的方式,如果请求路径错误则断言失败,StripPrefix设置为1,即在过滤中去掉第一个/facade参数;

spring: application: name: gateway cloud: gateway: routes: - id: facade uri: http://127.0.0.1:8082 predicates: - Path=/facade/** filters: - StripPrefix=1

执行原理如下:

这里是以配置文件的方式,设置facade服务的路由策略,其中指定了路径方式,在Gateway文档中提供了多种路由样例,比如:Header、Cookie、Method、Query、Host等断言方式;

3、编码方式

基于编码的方式管理路由策略,在Gateway文档同样提供了多种参考样例,如果路由服务少并且固定,配置的方式可以解决,如果路由服务很多,并且需要动态添加,那基于库表方式更适合;

@Configurationpublic class GateConfig { @Bean public RouteLocator customRouteLocator(RouteLocatorBuilder builder) { return builder.routes() .route("facade",r -> r.path("/facade/**").filters(f -> f.stripPrefix(1)) .uri("http://127.0.0.1:8082")).build(); }}4、库表加载

在常规的应用中,从库表中读取路由策略是比较常见的方式,定义路由工厂类并实现RouteDefinitionRepository接口,涉及加载、添加、删除三个核心方法,然后基于服务类从库中读取数据转换为RouteDefinition对象即可;

@Componentpublic class DefRouteFactory implements RouteDefinitionRepository { @Resource private ConfigRouteService routeService ; // 加载 @Override public Flux<RouteDefinition> getRouteDefinitions() { return Flux.fromIterable(routeService.getRouteDefinitions()); } // 添加 @Override public Mono<Void> save(Mono<RouteDefinition> route) { return route.flatMap(routeDefinition -> { routeService.saveRouter(routeDefinition); return Mono.empty(); }); } // 删除 @Override public Mono<Void> delete(Mono<String> idMono) { return idMono.flatMap(routeId -> { routeService.removeRouter(routeId); return Mono.empty(); }); }}

在源码仓库中采用的就是库表管理的方式,代码逻辑的更多细节可以移步Git参考,此处不再过多粘贴;

三、自定义路由策略自定义断言,继承AbstractRoutePredicateFactory类,注意命名以RoutePredicateFactory结尾,重写apply方法,即可执行特定的匹配规则;@Componentpublic class DefCheckRoutePredicateFactory extends AbstractRoutePredicateFactory<DefCheckRoutePredicateFactory.Config> { public DefCheckRoutePredicateFactory() { super(Config.class); } @Override public Predicate<ServerWebExchange> apply(Config config) { return new GatewayPredicate() { @Override public boolean test(ServerWebExchange serverWebExchange) { log.info("DefCheckRoutePredicateFactory:" + config.getName()); return StrUtil.equals("butte",config.getName()); } }; } @Data public static class Config { private String name; } @Override public List<String> shortcutFieldOrder() { return Collections.singletonList("name"); }}自定义过滤,继承AbstractNameValueGatewayFilterFactory类,注意命名以GatewayFilterFactory结尾,重写apply方法,即可执行特定的过滤规则;@Componentpublic class DefHeaderGatewayFilterFactory extends AbstractNameValueGatewayFilterFactory { @Override public GatewayFilter apply(AbstractNameValueGatewayFilterFactory.NameValueConfig config) { return (exchange, chain) -> { log.info("DefHeaderGatewayFilterFactory:"+ config.getName() + "-" + config.getValue()); return chain.filter(exchange); }; }}配置加载方式,此处断言与过滤即快捷的配置方式,所以在命名上要遵守Gateway的约定;spring: cloud: gateway: routes: - id: facade uri: http://127.0.0.1:8082 predicates: - Path=/facade/** - DefCheck=butte filters: - StripPrefix=1 - DefHeader=cicada,smile

通常来说,在应用级的系统中都需要进行断言和过滤的策略自定义,以提供业务或者架构层面的支撑,完成更加细致的规则校验,尤其在相同服务多版本并行时,可以更好的管理路由策略,从而避免分支之间的影响;

四、全局过滤器

在路由中采用的过滤是GatewayFilter,实际Gateway中还提供了GlobalFilter全局过滤器,虽然从结构上看十分相似,但是其职责是有本质区别的;

全局过滤器1:打印请求ID@Component@Order(1)public class DefOneGlobalFilter implements GlobalFilter { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { log.info("request-id:{}",exchange.getRequest().getId()) ; return chain.filter(exchange); }}全局过滤器2:打印请求URI@Component@Order(2)public class DefTwoGlobalFilter implements GlobalFilter { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { log.info("request-uri:{}",exchange.getRequest().getURI()) ; return chain.filter(exchange); }}

Gateway网关作为微服务架构系统中最先接收请求的一层,可以定义许多策略来保护系统的安全,比如高并发接口的限流,第三方授权验证,遭到恶意攻击时的IP拦截等等,尽量将非法请求在网关中拦截掉,从而保证系统的安全与稳定。

五、参考源码应用仓库:https://gitee.com/cicadasmile/butte-flyer-parent组件封装:https://gitee.com/cicadasmile/butte-frame-parent
本文链接地址:https://www.jiuchutong.com/zhishi/309254.html 转载请保留说明!

上一篇:帝国cms源码怎么安装(帝国cms商城源码)

下一篇:教你wordpress此站点遇到了致命错误如何解决(wordpress woocommerce 建站)

  • 华为荣耀8x和荣耀v10对比(华为荣耀8X和荣耀play哪个质量好)

    华为荣耀8x和荣耀v10对比(华为荣耀8X和荣耀play哪个质量好)

  • 钉钉日志怎么写(前台钉钉日志怎么写)

    钉钉日志怎么写(前台钉钉日志怎么写)

  • zip格式转rar格式(zip格式转换rar)

    zip格式转rar格式(zip格式转换rar)

  • 嵌入本地视频和链接本地视频的区别(嵌入本地视频和视频区别)

    嵌入本地视频和链接本地视频的区别(嵌入本地视频和视频区别)

  • 人人视频app缓存总是很慢(人人视频软件缓存进度)

    人人视频app缓存总是很慢(人人视频软件缓存进度)

  • 苹果系统需要经常更新吗(苹果系统需不需要更新?)

    苹果系统需要经常更新吗(苹果系统需不需要更新?)

  • 苹果x系统要不要更新(苹果x系统尽量不更新吗)

    苹果x系统要不要更新(苹果x系统尽量不更新吗)

  • office可以打开pdf吗(office可以打开PDF不)

    office可以打开pdf吗(office可以打开PDF不)

  • 为什么安卓手机抖音不显示在线(为什么安卓手机能连上wifi苹果连不上)

    为什么安卓手机抖音不显示在线(为什么安卓手机能连上wifi苹果连不上)

  • ipad10.2英寸是什么型号(ipad10.2英寸是ipad2019吗)

    ipad10.2英寸是什么型号(ipad10.2英寸是ipad2019吗)

  • 手机电话卡怎么装(手机电话卡怎么换)

    手机电话卡怎么装(手机电话卡怎么换)

  • 探探漫游位置有什么用(探探上漫游位置)

    探探漫游位置有什么用(探探上漫游位置)

  • 微信自动登录怎么取消(微信自动登录怎么开启)

    微信自动登录怎么取消(微信自动登录怎么开启)

  • 魅族16sPro怎么导出联系人(魅族手机导入)

    魅族16sPro怎么导出联系人(魅族手机导入)

  • 苹果11双卡设置(苹果11双卡设置主号拨号)

    苹果11双卡设置(苹果11双卡设置主号拨号)

  • 虾米歌曲怎么下载到u盘(虾米音乐怎么下载到手机本地)

    虾米歌曲怎么下载到u盘(虾米音乐怎么下载到手机本地)

  • 抖音照片和视频怎么放一起(抖音照片和视频怎么合成一个视频)

    抖音照片和视频怎么放一起(抖音照片和视频怎么合成一个视频)

  • 微信里面怎么录音(微信里面怎么录制聊天记录)

    微信里面怎么录音(微信里面怎么录制聊天记录)

  • 手机64g内存够用吗

    手机64g内存够用吗

  • 微商相册在哪关注别人(微商相册在哪关闭权限)

    微商相册在哪关注别人(微商相册在哪关闭权限)

  • 安卓手机视频误删怎么恢复(安卓视频被删怎么找回)

    安卓手机视频误删怎么恢复(安卓视频被删怎么找回)

  • qq仅自己可见怎么取消(qq仅自己可见怎么取消不了)

    qq仅自己可见怎么取消(qq仅自己可见怎么取消不了)

  • a1709 是ipad几(a1709是ipad几代pro)

    a1709 是ipad几(a1709是ipad几代pro)

  • 淘宝如何开店铺步骤(淘宝如何开店铺?)

    淘宝如何开店铺步骤(淘宝如何开店铺?)

  • 余利宝收益怎么算(余利宝收益怎么是负的)

    余利宝收益怎么算(余利宝收益怎么是负的)

  • 功放音响怎么调声音(功放音响怎么调音图解)

    功放音响怎么调声音(功放音响怎么调音图解)

  • 电脑系统还原步骤,ghost系统还原教程(电脑系统还原步骤)

    电脑系统还原步骤,ghost系统还原教程(电脑系统还原步骤)

  • 织梦手机站怎么做?Dedecms手机站三种不同建设方法和优劣分析(织梦建站详细教程)

    织梦手机站怎么做?Dedecms手机站三种不同建设方法和优劣分析(织梦建站详细教程)

  • 盈利能力的概念及内容
  • 烟叶税计入什么
  • 需要考虑的税务问题
  • 缴纳所得税的账务处理
  • 长期借款到期一年怎么算
  • 超市费用能否税前扣减?
  • 银行代扣出口快递费用
  • 企业更名后账务如何处理
  • 金税四期进展
  • 风险纳税人怎么查原因
  • 支付职工补贴计入什么科目
  • 出口佣金可以在企业所得税前扣除吗
  • 应收账款减值准备可以税前扣除吗
  • 发票过期未认证可以用吗
  • 电子承兑汇票支付信用查询
  • 定额手撕发票怎么买
  • 出租土地收入记什么科目
  • 销售收入里面包括免税收入呢
  • 小规模应交税费有三级科目吗
  • 华为matex3价格表
  • 个人所得汇算清缴是什么
  • 汇算清缴中的科目怎么填
  • 存货损失进项税
  • 收到一张餐饮费发票怎么入账
  • 企业购买银行理财
  • 计提五险一金的分录怎么写
  • 支付给代理机构的手续费计入
  • 免征的增值税账务处理
  • wordpress登录注册
  • php升级到php7注意的问题
  • easyui给下拉框赋值
  • php多图片上传到数据库
  • 采用权益法核算
  • thinkphp3.2.3
  • 基于反事实因果推断的度小满额度模型
  • 利用Linux Find命令查找文件方法记录 快速查找文件位置
  • 汽车维修费发票怎么开
  • 中国烟草资产负债表
  • 社保滞纳金计入个人账户吗
  • 免税票如何做会计分录
  • SQL(MSSQLSERVER)服务启动错误代码3414的解决方法
  • 增值税扣税凭证进项税额转出情况核实函
  • 企业所得税怎么算
  • 免税销售额和本期免税额
  • 利润与利润率之差公式
  • 劳动报酬收入包含什么
  • 内部往来借方是债权还是债务
  • 出售子公司股权合并报表的会计处理
  • 员工报销工伤险怎么报销
  • 信用卡产生滞纳金
  • 购买原材料保险费分录
  • 多计费用以前年度损益调整账务处理
  • 公司车还车贷计入什么科目
  • 购入房屋建筑物进项税额抵扣
  • 税控盘的主要功能
  • 建筑企业总公司施工可否由分公司开发票
  • 存货怎样进行账务处理
  • mysql 随机io
  • mysql忘记了初始密码
  • 在查询结果中添加字母
  • linux下mysql的root密码忘记的解决方法
  • mac怎么自己定制
  • linux进程管理器
  • linux多线程并发的处理方式
  • 神舟hasee笔记本测评
  • mac系统删除系统软件
  • linux系统中怎么输入中文
  • xp系统的设置在哪里
  • 安装macos10.15.7
  • fs是什么文件夹
  • exe是什么进程
  • win7系统打不开设备与打印机
  • javascript的
  • jquery 图片放大预览
  • shell脚本windows
  • c#属性窗口
  • python各进制符号
  • js map(parseint)
  • Dojo Javascript 编程规范 规范自己的JavaScript书写
  • 个体工商户年报补报流程
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设