步骤:

(1)读取zuul的配置文件,获取路由配置项信息;

  1. private static Properties props;
  2.  
  3. static {
  4. String fileName = "application.properties";
  5. props = new Properties();
  6. try {
  7. props.load(new InputStreamReader(PropertiesUtil.class.getClassLoader().getResourceAsStream(fileName), "UTF-8"));
  8. } catch (IOException e) {
  9. log.error("配置文件读取异常", e);
  10. }
  11. }

(2)在获取到的配置项信息中截取出服务的路由配置信息;

  1. /**
  2. * 根据zuul.routes.KSKZT.serviceId
  3. * 获取KSKZT
  4. * @param key
  5. * @return
  6. */
  7. public static String getRoutesKey(String key){
  8. return key.replace("zuul.routes.", "").replace(".serviceId", "");
  9. }
  10.  
  11. /**
  12. * 根据KSKZT
  13. * 获取zuul.routes.KSKZT.path
  14. * @param key
  15. * @return
  16. */
  17. public static String getRoutesPathKey(String key){
  18. return "zuul.routes."+key+".path";
  19. }
  20.  
  21. /**
  22. * 根据zuul.routes.KSKZT.path
  23. * 获取/KSKZT/**
  24. * @param pathKay
  25. * @return
  26. */
  27. public static String getRoutesPathPalue(String pathKay){
  28. return props.getProperty(pathKay.trim());
  29. }
  30.  
  31. /**
  32. * 获取系统配置的注册名称
  33. * @return
  34. */
  35. public static String getApplicationName(){
  36. return props.getProperty("spring.application.name");
  37. }
  38.  
  39. /**
  40. * 获取路由表
  41. * @return
  42. */
  43. public static List<Map<String,String>> getRouteList(){
  44. List<Map<String,String>> routeList = new ArrayList<>();
  45. for(Object key : props.keySet()){
  46. if(key.toString().startsWith("zuul.routes") && key.toString().endsWith(".serviceId") ){
  47. Map< String, String> route = new HashMap<String, String>();
  48. route.put("serviceName",props.get(key)+"");
  49. route.put("servicePath",getApplicationName()+getRoutesPathPalue(getRoutesPathKey(getRoutesKey(key.toString()))));
  50. routeList.add(route);
  51. }
  52. }
  53. return routeList;
  54. }

测试获取到的路由表

  1. public static void main(String[] args) {
  2. List<Map<String,String>> list = getRouteList();
  3. for (Map<String,String> object : list) {
  4. System.out.println("********************");
  5. System.out.println(object.get("serviceName"));
  6. System.out.println(object.get("servicePath"));
  7.  
  8. }
  9. }

(3)保证监控平台获取正确的路由表;

  1)在监控平台启动时:通过HttpClient请求zuul提供的接口,获取路由表信息

  2)在zuul启动时:通过的HttpClient请求监控平台的更新接口,将路由表作为参数传递给监控平台,监控平台接受并更新。

微服务监控平台获取网关(zuul)配置列表的更多相关文章

  1. Chris Richardson微服务翻译:构建微服务之使用API网关

    Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关(本文) 构建微服务之微服务架构的进程通讯 微服务架构中的服务发现 微服务之事件驱动的数据管理 微服 ...

  2. SpringCloud微服务实战——搭建企业级开发框架(四十四):【微服务监控告警实现方式一】使用Actuator + Spring Boot Admin实现简单的微服务监控告警系统

      业务系统正常运行的稳定性十分重要,作为SpringBoot的四大核心之一,Actuator让你时刻探知SpringBoot服务运行状态信息,是保障系统正常运行必不可少的组件.   spring-b ...

  3. spring cloud+dotnet core搭建微服务架构:Api网关(三)

    前言 国庆假期,一直没有时间更新. 根据群里面的同学的提问,强烈推荐大家先熟悉下spring cloud.文章下面有纯洁大神的spring cloud系列. 上一章最后说了,因为服务是不对外暴露的,所 ...

  4. spring cloud+.net core搭建微服务架构:Api网关(三)

    前言 国庆假期,一直没有时间更新. 根据群里面的同学的提问,强烈推荐大家先熟悉下spring cloud.文章下面有纯洁大神的spring cloud系列. 上一章最后说了,因为服务是不对外暴露的,所 ...

  5. Spring Cloud 微服务三: API网关Spring cloud gateway

    前言:前面介绍了一款API网关组件zuul,不过发现spring cloud自己开发了一个新网关gateway,貌似要取代zuul,spring官网上也已经没有zuul的组件了(虽然在仓库中可以更新到 ...

  6. 宜信开源微服务任务调度平台(SIA-TASK)

    背景 无论是互联网应用或者企业级应用,都充斥着大量的批处理任务.常常需要一些任务调度系统帮助开发者解决问题.随着微服务化架构的逐步演进,单体架构逐渐演变为分布式.微服务架构.在此的背景下,很多原先的任 ...

  7. 第七模块 :微服务监控告警Prometheus架构和实践

    119.监控模式分类~1.mp4 logging:日志监控,Logging 的特点是,它描述一些离散的(不连续的)事件. 例如:应用通过一个滚动的文件输出 Debug 或 Error 信息,并通过日志 ...

  8. 微服务治理平台的RPC方案实现

    导读:本文主要探讨了rpc框架在微服务化中所处的位置,需要解决的问题.同时介绍了用友云微服务治理平台的rpc解决方案,为什么选择该方案.该方案提供的好处是什么.同时也会介绍用友RPC框架的基本结构以及 ...

  9. 大型互联网 b2b b2c o2o 电子商务微服务云平台

    鸿鹄云商大型企业分布式互联网电子商务平台,推出PC+微信+APP+云服务的云商平台系统,其中包括B2B.B2C.C2C.O2O.新零售.直播电商等子平台. 分布式.微服务.云架构电子商务平台 java ...

随机推荐

  1. win10下以管理员身份打开hosts文件

    第一步: 第二步: 第三步:先后执行两个命令cmd        notepad hosts 最后一步:在记事本中修改host文件

  2. Unable to execute command or shell on remote system: Failed to Execute process

    1.问题描述 先说下我的项目环境:jenkins部署在windows下面,项目部署也是在windows下面,ssh服务器是FreeSSHd,原来是打算用Send files or execute co ...

  3. List<SelectListItem> 转为 SelectList

    List<SelectListItem> 转为/转换 SelectList SelectList slPayCh = new SelectList(GetPayChannels(),&qu ...

  4. 3级搭建类301-Oracle 11g RAC 双节点搭建(11.2.0.4)非公

    项目文档引子系列是根据项目原型,制作的测试实验文档,目的是为了提升项目过程中的实际动手能力,打造精品文档AskScuti. 项目文档引子系列目前不对外发布,仅作为博客记录.如学员在实际工作过程中需提前 ...

  5. vue自学入门-8(vue slot-scope)

    vue自学入门-1(Windows下搭建vue环境) vue自学入门-2(vue创建项目) vue自学入门-3(vue第一个例子) vue自学入门-4(vue slot) vue自学入门-5(vuex ...

  6. uniGUI之自定义JS事件动作ClientEvents(30)

    sender.setText('Over'); MainForm.UniLabel1.setPosition(x, y); MainForm.UniLabel1.setText('Click!');

  7. 在bootstrap的column中的formatter里不能传递row参数吗?

    row 是一个对象  你需要把它转成字符串用JSON.stringify(row),这样就是字符串了,但是还有问题,你需要给加密一下encodeURI(JSON.stringify(row)),然后方 ...

  8. 打包Windowsform项目出现File 'Cognex.VisionPro3D.dll' targeting 'AMD64' is not compatible with the project's target platform 'x86'错误

    错误信息: 个人理解此错误的大概意思是:打包的文件是64位的但是打包后的文件设置的是32位的,就出现冲突了. 解决方案:选择打包程序项目的属性窗口设置TargetPlatform属性为对应的值,本项目 ...

  9. 解决jquery click事件执行两次

    js 解决办法 event.preventDefault() :阻止默认行为,可以用 event.isDefaultPrevented() 来确定preventDefault是否被调用过了 event ...

  10. MFC线程间消息传递(转)

    原文地址:https://blog.csdn.net/qq_37059136/article/details/84972192