位置: 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 建站)

  • 鸿蒙桌面布局图片怎么设置(鸿蒙桌面布局教程)

    鸿蒙桌面布局图片怎么设置(鸿蒙桌面布局教程)

  • 华为手机睡眠监测在哪里(华为手机睡眠监测费电吗)

    华为手机睡眠监测在哪里(华为手机睡眠监测费电吗)

  • 没有骑手接单怎么办(没有骑手接单怎么加小费)

    没有骑手接单怎么办(没有骑手接单怎么加小费)

  • 微信不能用qq号注册了吗(微信不能用qq号注册登录吗)

    微信不能用qq号注册了吗(微信不能用qq号注册登录吗)

  • airpods重新激活左耳(airpods重新激活后不能查找)

    airpods重新激活左耳(airpods重新激活后不能查找)

  • 微信第三方服务用不了(微信第三方服务平台电话是多少)

    微信第三方服务用不了(微信第三方服务平台电话是多少)

  • 小米9能只换外屏可以吗(小米9可以换后盖吗)

    小米9能只换外屏可以吗(小米9可以换后盖吗)

  • 键盘zxcvbnm一排失灵(键盘一排都不灵什么原因)

    键盘zxcvbnm一排失灵(键盘一排都不灵什么原因)

  • 华为手机消息群发怎么发(华为短信群聊)

    华为手机消息群发怎么发(华为短信群聊)

  • ipad腾讯会议没有屏幕共享(iPad腾讯会议没有共享屏幕)

    ipad腾讯会议没有屏幕共享(iPad腾讯会议没有共享屏幕)

  • 小电充电宝插回去就是归还吗(小电充电宝插回去没电)

    小电充电宝插回去就是归还吗(小电充电宝插回去没电)

  • 华为手机怎么弄两个界面(华为手机怎么弄俩微信)

    华为手机怎么弄两个界面(华为手机怎么弄俩微信)

  • 怎么取消鼠标滚轮缩放(怎么取消鼠标滚轮)

    怎么取消鼠标滚轮缩放(怎么取消鼠标滚轮)

  • cha fan是什么接口(cha_fan1什么意思)

    cha fan是什么接口(cha_fan1什么意思)

  • 手机hifi是什么意思(hifi是什么功能)

    手机hifi是什么意思(hifi是什么功能)

  • 华为手机安装未知应用权限在哪(华为手机安装未知应用在哪里找到)

    华为手机安装未知应用权限在哪(华为手机安装未知应用在哪里找到)

  • 嗨siri关闭旁白是什么意思(嗨 siri打开旁白会怎么样)

    嗨siri关闭旁白是什么意思(嗨 siri打开旁白会怎么样)

  • 乐视手机为什么会卡(乐视手机为什么安装不了应用)

    乐视手机为什么会卡(乐视手机为什么安装不了应用)

  • 华为nova5i支不支持分屏(华为nova5i支不支持OTG)

    华为nova5i支不支持分屏(华为nova5i支不支持OTG)

  • 华为nova闪退怎么解决(nova8闪退)

    华为nova闪退怎么解决(nova8闪退)

  • iphone7主板坏了特征(iphone7主板坏了屏幕废物利用)

    iphone7主板坏了特征(iphone7主板坏了屏幕废物利用)

  • 【1】从零开始学习目标检测:YOLO算法详解(小说《从零开始》)

    【1】从零开始学习目标检测:YOLO算法详解(小说《从零开始》)

  • mysql一对多关系如何理解(mysql一对多关系如何一次性查出来)

    mysql一对多关系如何理解(mysql一对多关系如何一次性查出来)

  • 你必须了解的最简单的帝国CMS网站转移方法详解(你必须了解的最大的问题)

    你必须了解的最简单的帝国CMS网站转移方法详解(你必须了解的最大的问题)

  • 退个税手续费增值税怎么计算
  • 销项税是什么意思进项税是什么意思
  • 本月累计专项扣款怎么算
  • 免税申报表里的免税销售额是不含税
  • 增值税的账务处理 月末怎么结转 案例
  • 代理记账公司账本
  • 对公付款对方不开发票怎么处理
  • 利息调整的计算公式
  • 无形资产研发成功
  • 投资收益分红需要交企业所得税吗
  • 30人以上的企业有哪些
  • 发票不在业务发生地
  • 委托加工消费税纳税义务发生时间
  • 公司聚餐费用标准
  • 贴现利息的计算题
  • 小微企业营业外收入税率是多少
  • 工程款开票备注栏
  • 统借统还的所得税政策
  • 属于资金的筹资方式是
  • 房地产企业土地增值税清算案例
  • 材料票可以直接在税务局开吗
  • 合并报表收费
  • 支付罚款的支出计入什么科目
  • 汇算清缴涉及长期投资收益如何做会计核算?
  • 1697509966
  • 非流动资产基金是什么意思
  • 公司分期付款购车账务处理
  • 支付电费的税费怎么算
  • 二手固定资产使用年限
  • 工业企业生产成本核算表
  • php怎么配置环境
  • 报销各种费用怎么做分录
  • 对于接受捐赠的固定资产
  • PHP:Memcached::setOptions()的用法_Memcached类
  • PHP:pg_affected_rows()的用法_PostgreSQL函数
  • 资源税纳税申报流程
  • 高新技术企业在哪申报年报
  • nginx同一个端口设置两个网站
  • 企业注销未抵扣完的进项税额怎么处理做账
  • 纳税调整项目明细表30行怎么填写
  • HTTP 错误 500.19- Internal Server Error 错误解决方法
  • php封装数据库操作
  • 一般纳税人销售给小规模纳税人
  • 企业计提的医疗保险属于企业设定提存计划的内容
  • 微软官方wintogo
  • 购进原材料款项未付应编制什么凭证
  • 支付厂房租赁费怎么入账
  • 残疾人保障金计入哪个会计科目
  • 成本利润率算出的不含税吗
  • 费用报销重复了怎么写情况说明
  • 资产负债所有者权益借贷方向
  • 建筑设备租赁如何交税
  • 应付账款发生坏账怎么办
  • mssql备份数据库
  • 土地出让合同的法律效力
  • sql数据对比语句
  • 免抵退税会计处理
  • 政府会计制度收回多发工资
  • 公司冲账发票做账流程
  • 航信服务费减免怎么填
  • 收到对方的银行汇票算什么凭证
  • 金蝶固定资产管理
  • 税金附加科目有哪些
  • 销售商品返现怎么做
  • 摊销本月的广告费合理吗
  • 施工企业其他业务收入包括哪些
  • mysql查询语句大全及用法
  • 查找非空顺序表l中第一个最大的元素
  • centos关闭开机启动项
  • linux批处理文件怎么写
  • rasman.exe - rasman是什么进程 有什么作用
  • 如何避免升级为查帐征收
  • win7宽带连接错误813怎么解决办法
  • javascript ie
  • web中class和id的区别
  • win10下载杀毒软件
  • js实现超精简的快捷键
  • windows捕获文件夹
  • 寻找志同道合的小伙伴
  • 北京税务局网站官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设