思路

根据eureka的metadata进行自定义元数据,然后使用ribbon对该元数据进行过滤和匹配,选择server。

实现

这里使用header来传递路由信息,改造ribbon-discovery-filter-spring-cloud-starter,使其不影响静态server list。

filter

public class TagFilter extends ZuulFilter {private static final Logger LOGGER = LoggerFactory.getLogger(TagFilter.class);@Overridepublic String filterType() {return "pre";}@Overridepublic int filterOrder() {return 7;}@Overridepublic boolean shouldFilter() {return true;}@Overridepublic Object run() {RequestContext requestContext = RequestContext.getCurrentContext();HttpServletRequest request = requestContext.getRequest();String tag = request.getHeader("tag");RibbonFilterContextHolder.getCurrentContext().add("tag", tag);LOGGER.info("route {} to {}",request.getRequestURI(),tag);return null;}
}

predicate

public class MetadataAwarePredicate extends AbstractServerPredicate{@Overridepublic boolean apply(PredicateKey input) {if(input == null || !(input.getServer() instanceof DiscoveryEnabledServer)){return true;}DiscoveryEnabledServer server = (DiscoveryEnabledServer) input.getServer();final RibbonFilterContext context = RibbonFilterContextHolder.getCurrentContext();final Set<Map.Entry<String, String>> attributes = Collections.unmodifiableSet(context.getAttributes().entrySet());final Map<String, String> metadata = server.getInstanceInfo().getMetadata();return metadata.entrySet().containsAll(attributes);}
}

rule

public class MetadataAwareRule extends ZoneAvoidanceRule {@Overridepublic AbstractServerPredicate getPredicate() {return new MetadataAwarePredicate();}
}

autoconfig

@Configuration
@ConditionalOnClass(DiscoveryEnabledNIWSServerList.class)
@AutoConfigureBefore(RibbonClientConfiguration.class)
@ConditionalOnProperty(value = "ribbon.filter.metadata.enabled", matchIfMissing = true)
public class RibbonMetaFilterAutoConfiguration {@Bean@ConditionalOnMissingBean@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)public MetadataAwareRule metadataAwareRule() {return new MetadataAwareRule();}
}

doc

  • Spring Cloud: Ribbon dynamic routing

  • SpringCloud Ribbon 降级、限流、灰度发布


想获取最新内容,请关注微信公众号

springcloud基于ribbon的canary路由方案相关推荐

  1. springcloud基于ribbon的canary路由方案 1

    为什么80%的码农都做不了架构师?>>>    ##思路 根据eureka的metadata进行自定义元数据,然后使用ribbon对该元数据进行过滤和匹配,选择server. ##实 ...

  2. 基于MT7688AN模块开发板WiFi路由方案无线音频传输WiFi音箱测试

    无线路由解决方案无损WiFi音频传输测试 基于MT7688AN模块开发板WiFi路由方案无线音频传输WiFi音箱测试 L107物联网路由器模块是基于联发科MT7688或MT7628芯片组.该模块只需要 ...

  3. 基于nacos的智能路由实现与应用

    目录 一. 概述 二. 遇到的问题 1. 困难的环境管理与应用部署 2. 缺失的技术方案 3. 研发问题 <1> 后端多版本并行联调难 <2> 前后端联调难 4. 其他问题 & ...

  4. 史上最简单的SpringCloud教程 | 第五篇: 路由网关(zuul)

    转:https://blog.csdn.net/forezp/article/details/69939114 最新版本: 史上最简单的SpringCloud教程 | 第五篇: 路由网关(zuul)( ...

  5. SpringCloud学习系列之七 ----- Zuul路由网关的过滤器和异常处理

    前言 在上篇中介绍了SpringCloud Zuul路由网关的基本使用版本,本篇则介绍基于SpringCloud(基于SpringBoot2.x,.SpringCloud Finchley版)中的路由 ...

  6. 路由ssr服务器信息不完整,基于Nuxt构建动态路由SSR服务

    大约两年前曾经分享过基于Vue的SSR框架Nuxt的简单使用<基于Vue.js的SSR方案之Nuxt.js>,今天因为有SSR需求又重新做了一些尝试. 由于目前在做的是一个能够动态构建页面 ...

  7. 【翻译】基于 Create React App路由4.0的异步组件加载(Code Splitting)

    基于 Create React App路由4.0的异步组件加载 本文章是一个额外的篇章,它可以在你的React app中,帮助加快初始的加载组件时间.当然这个操作不是完全必要的,但如果你好奇的话,请随 ...

  8. ASP.NET Core 2.2 : 扒一扒新的Endpoint路由方案

    ASP.NET Core 从2.2版本开始,采用了一个新的名为Endpoint的路由方案,与原来的方案在使用上差别不大,但从内部运行方式上来说,差别还是很大的.上一篇ASP.NET Core;图解路由 ...

  9. ASP.NET Core 2.2 : 十六.扒一扒2.2版更新的新路由方案

    ASP.NET Core 2.2 : 十六.扒一扒2.2版更新的新路由方案 原文:ASP.NET Core 2.2 : 十六.扒一扒2.2版更新的新路由方案 ASP.NET Core 从2.2版本开始 ...

最新文章

  1. python操作word文档(python-docx)
  2. RK 3299 Ubuntu 配置密钥
  3. factors to consider about the publications
  4. STL vector的几种清空容器(删除)办法
  5. pc版android sd卡,告别瓶颈:安卓闪存(SD卡)I/O优化
  6. 静态成员函数与静态成员变量
  7. 2星|《麦肯锡图表工作法》:用图表做商业分析的入门演示
  8. Linux文件解压缩
  9. 第二章 生成、打包、部署和管理应用程序及类型
  10. c语言键盘函数空格,C语言中关于scanf函数的用法
  11. 新春活动策划案例(共31份)
  12. 图解 React 的 diff 算法:核心就两个字 —— 复用
  13. 时序分析/约束(一):相关概念
  14. 四级口语计算机对话,2017大学英语四级口语场景对话练习(5)
  15. 【生成模型】简述概率密度函数可处理流模型
  16. 软件安全性测试有那些
  17. [Mysql] PERCENT_RANK()函数 | CUME_DIST()函数
  18. 目标检测数据集:坦克(2)
  19. nginx服务器网站目录浏览,Nginx开启目录浏览功能 | 系统运维
  20. 培训课件通用教育PPT模板

热门文章

  1. Facebook收购GrokStyle:布局AI零售
  2. 科大讯飞裁员!提前就餐4秒被优化,员工们都这样议论
  3. 人物丨深度学习大神Hinton推翻自己30年的学术成果另造新世界
  4. 人工智能如何推动神经科技发展?
  5. 中国芯片将靠此超车!RISC-V架构神在哪全解构
  6. 关于未来的蝴蝶效应,《崛起的超级智能》创作有感
  7. 终于看见光的速度了:每秒一万亿帧的相机,拍摄到光的运行状态!
  8. 【干货】百度联合清华大学发布国内首个基于AI实践的《产业智能化白皮书》(附报告全文)...
  9. 一图看懂国外智能网联汽车传感器产业发展!
  10. 芯片植入:“增强人类”的生物黑科技