精华内容
下载资源
问答
  • 每个公司项目的情况都不一样,我这个只...一些相关知识可以了解一下,我就不做赘述了,大家可以先去看一下,了解一下基础的东西, 他的教程只适用于已存在的路由进行更新, 但是相关知识的介绍还是可以看看的 具体原因...

    每个公司项目的情况都不一样,我这个只适用于zuul

    然后我是根据配置文件去动态刷新路由的,看过网上另一个教程

    https://blog.csdn.net/u013815546/article/details/68944039

    一些相关知识可以了解一下,我就不做赘述了,大家可以先去看一下,了解一下基础的东西, 他的教程只适用于已存在的路由进行更新, 但是相关知识的介绍还是可以看看的

    具体原因可以看 locateRoutes 方法,通过这个方法获取路由信息

    protected Map<String, ZuulRoute> locateRoutes() {
            LinkedHashMap<String, ZuulRoute> routesMap = new LinkedHashMap();
            Iterator var2 = this.properties.getRoutes().values().iterator();
    
            while(var2.hasNext()) {
                ZuulRoute route = (ZuulRoute)var2.next();
                routesMap.put(route.getPath(), route);
            }
    
            return routesMap;
        }

    这是新增一个LinkedHashMap给用户, 所以往里面新增路由信息时,zuul是不会增加路由信息的,这就是他的动态路由的只能刷新部分路由的原因

    接下来开始讲解我的方法,我是根据远端的配置文件实时更新路由信息的,大家可以根据自己的情况选择数据库或者其它之类的进行修改

    创建 DynamicZuulConfig ,主要是为了实时获取路由信息, 关键注解 @RefreshScope , 用于刷新配置信息,具体作用自行度娘

    package com.xxx.gate.customer.config;
    
    import lombok.Data;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.boot.context.properties.EnableConfigurationProperties;
    import org.springframework.cloud.context.config.annotation.RefreshScope;
    import org.springframework.context.annotation.Configuration;
    
    import java.util.List;
    
    @Data
    @RefreshScope
    @Configuration
    @EnableConfigurationProperties
    @ConfigurationProperties(prefix = "developer")
    public class DynamicZuulConfig {
        private boolean flag; // 标识刷新的flag
        private List<String> names;
        private List<String> gate-x; // 需要做动态路由的网关名称
    }
    

     

    创建 DynamicZuulConfiguration 用于将一些Bean对象注入到动态路由加载器中,

    这边routeLocator方法加RefreshScope 注解是为了提醒zuul加载器,配置文件更新了, 参考 ↓

    https://www.cnblogs.com/yjmyzz/p/8085530.html 

    package com.xxx.gate.customer.config;
    
    import com.xxx.gate.customer.locator.DynamicRouteLocator;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.autoconfigure.web.ServerProperties;
    import org.springframework.cloud.context.config.annotation.RefreshScope;
    import org.springframework.cloud.netflix.zuul.filters.ZuulProperties;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class DynamicZuulConfiguration {
        @Autowired
        private DynamicZuulConfig developerNamesConfig; // 动态路由信息配置文件
        @Autowired
        private ZuulProperties zuulProperties;
        @Autowired
        private ServerProperties server;
    
        @Bean
        @RefreshScope //关键注解
        public DynamicRouteLocator routeLocator() {
            DynamicRouteLocator routeLocator = 
    new DynamicRouteLocator(this.server.getServletPrefix(), this.zuulProperties, this.developerNamesConfig);
            return routeLocator;
        }
    }
    

     

    创建 DynamicRouteLocator 并继承 SimpleRouteLocator 和实现 RefreshableRouteLocator 接口

    这才是主要的zuul加载路由信息的实现方法

    private void locateRoutesRefresh用于封装动态路由信息, 关键是最后一句, 将路由信息重新设置到 ZuulProperties 中

    properties.setRoutes(routeMap);

     

    package com.xxx.gate.customer.locator;
    
    import com.xxx.gate.customer.config.DynamicZuulConfig;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.cloud.netflix.zuul.filters.RefreshableRouteLocator;
    import org.springframework.cloud.netflix.zuul.filters.SimpleRouteLocator;
    import org.springframework.cloud.netflix.zuul.filters.ZuulProperties;
    import org.springframework.cloud.netflix.zuul.filters.ZuulProperties.ZuulRoute;
    
    import java.util.List;
    import java.util.Map;
    
    public class DynamicRouteLocator extends SimpleRouteLocator implements RefreshableRouteLocator {
        private static Logger logger = LoggerFactory.getLogger(DynamicRouteLocator.class);
    
        private DynamicZuulConfig developerNamesConfig;
    
        private ZuulProperties properties;
    
        public DynamicRouteLocator(String servletPath, ZuulProperties properties, DynamicZuulConfig developerNamesConfig) {
            super(servletPath, properties);
            this.properties = properties;
            this.developerNamesConfig = developerNamesConfig;
        }
    
        @Override
        public void refresh() {
            doRefresh();
        }
    
        @Override
        protected Map<String, ZuulRoute> locateRoutes() {
            // 从application.properties中加载路由信息
            Map<String, ZuulRoute> routeMap = properties.getRoutes();
            // 重新加载动态配置中信息
            locateRoutesRefresh(routeMap);
            return routeMap;
        }
    
        /**
         * 修改路由对象信息
         */
        private void locateRoutesRefresh(Map<String, ZuulRoute> routeMap) {
            if (null == developerNamesConfig || !developerNamesConfig.isFlag() || developerNamesConfig.getGate-X().isEmpty() || developerNamesConfig.getNames().isEmpty()) {
                return;
            }
            List<String> keys = developerNamesConfig.getGate-X();
            List<String> names = developerNamesConfig.getNames();
            keys.forEach(key ->
                    names.forEach(name -> {
                        String id = key + "_" + name;
                        String path = "/" + id + "/**";
                        String serviceId = id.replaceAll("_", "-");
                        ZuulRoute zuulRoute = routeMap.get(path);
                        if (null == zuulRoute) {
                            zuulRoute = new ZuulRoute();
                        }
                        zuulRoute.setId(id);
                        zuulRoute.setPath(path);
                        zuulRoute.setServiceId(serviceId);
                        zuulRoute.setStripPrefix(true);
                        routeMap.put(path, zuulRoute);
                    })
            );
            properties.setRoutes(routeMap);    //关键步骤,将路由信息重新设置到ZuulProperties中
            developerNamesConfig.setFlag(false);    //将更新标识设置为false
        }
    }
    

     

    以上就是所有代码,接下来讲解配置文件

    在远端配置git上创建common_developer.yml 用于填写动态信息, 因为locateRoutes 方法会被一直调用,所以需要使用flag来标识需要更新路由信息,否则会一直重复对路由赋值

    # 开发环境动态路由配置信息
    developer:
        flag: true # 标识需要更新
        gate-a: # 网关A
            - a_microservice # a微服务
            - b_microservice # b微服务
            - c_microservice # c微服务
           
    
        gate-b: # 网关B
            - d_microservice # d微服务
            - e_microservice # e微服务
    
        gate-c: # 网关C
            - f_microservice # f微服务
    
        names:
            - zhangsan # 开发人员张三
            - lisi # 开发人员李四
            - wangwu #开发人员王五
            
    

    这边可以针对每个网关都写一个配置文件,也可以针对所有网关和微服务写一个公共的配置文件

    接下来是生成的格式

    zuul路由关键属性是 id, path, serviceId, StripPrefix属性, 分别对应以下属性

    id: zuul.routes.xxx 

    path: zuul.routes.xxx.path // url路径

    serviceId: zuul.routes.xxx.serviceId // 对应spring.application.name属性

    StripPrefix: 默认为true

    所以在设置spring.application.name 属性时最好和id, path, serviceId 统一

    比如xxx-microservice,这样生成格式就是

    zuul:
        routes:
            xxx_microservice:
                path: /xxx_microservice/**
                serviceId: xxx-microservice
            # 下面是动态路由生成的结构
            xxx_microservice_zhangsan:
                path: /xxx_microservice_zhangsan/**
                serviceId: xxx-microservice-zhangsan

    这样就不用做多余的兼容代码了

     

    要使用RefreshScope 需要引入下面的jar包 

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

    然后在配置文件中加入下面的配置, 这是为了在调用refresh接口时忽略安全校验(好像是这个...),否则就无法触发@RefreshScope

    management:
      security:
        enabled: false

     

     

    最后就是通过webhooks功能实现远端配置文件更新时请求springcloud的refresh接口, 我这边用的是公司内部的gitlab

    进入项目,然后在左侧选择 Setting -> integrations

    URL 就是请求的地址,默认使用POST请求, 输入http://ip:port/refresh ,然后 Add webhook, 就可以添加了

    之后每次更新配置中心文件时, 就会去post 网关的/rerfesh接口,然后刷新配置信息

    如果帮到你,请点个赞吧 O(∩_∩)O~

    展开全文
  • VUE 路由适用于道的问题.pdf
  • 行业分类-电子电器-适用于动态航空无线自组网的路由方法.zip
  • 1.话不多说,先来个小漩涡 <template> <div class="boxDiv"> <van-nav-bar title="监护图表" left-text="返回" left-arrow fixed @click-left="onClickLeft"/> ...div style="...

    1.话不多说,先来个小漩涡

    <template>
      <div class="boxDiv">
        <van-nav-bar title="监护图表" left-text="返回" left-arrow fixed @click-left="onClickLeft"/>
        <PatientBase/>
        <div style="height: 0.5rem;line-height: 0.5rem">
          <div class="btntwoRouterUL">
            <span class="btntwoRouter btnmar" :class="activeClass == 1 ? 'active':''" @click="btnnavclick(1)">
              <router-link :to="{name:'GCInfo',params:{CaseId:this.CaseId}}">特殊提示</router-link>
            </span>
            <span class="btntwoRouter"  :class="activeClass == 2 ? 'active':''"  @click="btnnavclick(2)">
              <router-link :to="{name:'Chart',params:{CaseId:this.CaseId}}">持续关注项目</router-link>
            </span>
          </div>
        </div>
        <div  class="chartbtn">
          <router-view/>
        </div>
      </div>
    </template>
    
    <script>
    
    
    
      import PatientBase from "@/components/PC/PatientHeader";/*引入头部*/
      import * as OperativeInfoAJAX from '@/api/pc/OperativeInfo.js';/*引入axios.js*/
      export default {
        data () {//Vue 实例的数据对象
          return {
            msg: '',
            OPTInfoArr:[],
            CaseId: this.$route.params.CaseId,
            activeClass:1
          }
        },
        components:{//组件
          PatientBase
        },
        computed: {//计算属性
    
        },
        created(){//挂载前
          this.OperativeInfo()
    
        },
        methods: {//方法,可以直接通过 VM 实例访问这些方法,或者在指令表达式中使用。方法中的?this?自动绑定为 Vue 实例。
          /**
           * 获取手术信息
           */
          OperativeInfo(){
    
           let patInfo = this.$getLocalStorage("PatInfo","object");
            OperativeInfoAJAX.GetPatBaseInfo(patInfo)
              .then(res=>{
                if(res.Errs.length<1){
                  this.OPTInfoArr=res.Result.OperationList
                }else{
                  this.$message({
                    message: res.Errs.join(','),
                    type: 'error',
                  })
                }
    
              })
              .catch(err=>{
    
              })
          },
    
    
          /*返回上一级*/
          onClickLeft(){
            this.$router.go(-1)
          },
    
    
          /*导航栏*/
          navclick(){
    
          },
          btnnavclick(index){
            this.activeClass = index;  // 把当前点击元素的index,赋值给activeClass
          }
    
        },
        mounted () {//事件    挂载完成,一般在此发起ajax请求
          // this.drawLine()
    
    
    
    
        },
        watch:{//监听事件函数
    
        },
    
      }
    </script>
    
    <!-- Add "scoped" attribute to limit CSS to this component only -->
    <style scoped>
    .btntwoRouterUL{
      text-align: center;
    }
    .btntwoRouterUL  .btntwoRouter{
        width: 1.2rem;
        height: 0.37rem;
        border-radius: 0.2rem;
        background-color: #ffffff;
        line-height: 0.37rem;
        text-align: center;
        display: inline-block;
      }
    .btntwoRouterUL  .btntwoRouter>a{
      color: #808080;
    }
    .btnmar{
      margin-right: 0.3rem;
    }
    
    
      *{
        font-size: 0.14rem;
      }
      .boxDiv{
        height: 100%;
        display: flex;
        flex-flow: column;
      }
    .chartbtn{
      /*background-color: #f2f3f7;*/
      /*height: 100%;*/
      padding:0rem 0.1rem 0.1rem 0.1rem;
      flex: 1;
      overflow-y: auto;
    }
    
    .active >a{
      color: #ffffff!important;
    }
    .active{
      background-color: #0768a9!important;
    }
    
    </style>
    
    
    

    2.我先干为敬,你随意

    展开全文
  • vue-router 动态路由详解

    千次阅读 2019-10-28 17:39:00
    一、动态路由适用于什么场景 比如写用户的信息页面时,页面的结构都一样,只是用户的名称不一样,这个时候就可以使用动态路由 二、下面写个小案例 1、创建用户管理页面testRouter3.vue <template> <div>...

    一、动态路由适用于什么场景

    比如写用户的信息页面时,页面的结构都一样,只是用户的名称不一样,这个时候就可以使用动态路由

    二、下面写个小案例

    1、创建用户管理页面testRouter3.vue

    <template>
      <div>
        testRouter3
        获取当前该页面的路由参数值为:{{$route.params.id}}
      </div>
    </template>
    
    <script>
    export default {
      name: 'TestRouter3'
    }
    </script>
    
    <style scoped></style>
    

    2、在路由配置文件index.js文件中配置动态路由

    import Vue from 'vue';
    import Router from 'vue-router';
    import testRouter3 from '@/components/testRouter3';
    Vue.use(Router);
    
    export default new Router({
      routes: [
        {
          path:'/testRouter3/:id',//通过    /:参数     的格式配置动态路由
          name:'TestRouter3',
          component:testRouter3
        }
      ]
    })
    

    3、如果在浏览器中输入动态参数为:324141,结果如下:

    在这里插入图片描述

    4、同样的,如果在浏览器中输入动态参数为:22222,结果如下:

    在这里插入图片描述

    展开全文
  • 一、路由算法、 二、路由算法 分类、 三、静态路由算法、 四、动态路由算法、 五、动态路由算法 分类、 六、分层次的路由选择协议、





    一、路由算法



    路由算法 : 选择数传输的 “最佳路由” , 该 “最佳” 是相对于某特定要求得出的合理选择 ;


    路由表 : 又称为 转发表 , 有如下条目 :

    • 目的网络 IP 地址
    • 子网掩码
    • 下一跳 IP 地址
    • 接口




    二、路由算法 分类



    路由算法 分类 :

    • 静态路由算法

    • 动态路由算法





    三、静态路由算法



    静态路由算法 :

    ① 特点 :非自适应 路由算法 ;

    ② 路由配置 : 管理员 手工配置 路由信息 ;

    ③ 优点 : 简单 , 可靠 ; 负载稳定 , 拓扑变化小 的网络中 运行 ;

    ④ 缺点 : 路由更新慢 , 不适合 大型网络 ;

    ⑤ 适用场景 : 用于 安全性较高的军事网络小型商业网络 ;





    四、动态路由算法



    动态路由算法 :

    ① 特点 :自适应 路由算法 ;

    ② 路由配置 : 路由器之间 彼此交换 路由信息 ; 按照路由算法优化出路由表项 ;

    ③ 优点 : 路由信息更新快 ; 适用于大型网络 , 及时响应链路费用 和 网络拓扑变化 ;

    ④ 缺点 : 算法复杂 , 网络负担较高 ;

    ⑤ 适用场景 : 用于 大型商业网络 ;





    五、动态路由算法 分类



    动态路由算法 分类 :

    ① 全局性 动态路由算法 : 链路状态路由算法 OSPF , 所有的路由器掌握着 完整的网络拓扑 和 链路费用信息 ;

    ② 分散性 动态路由算法 : 距离向量路由算法 RIP , 路由器只掌握 物理连接的 相邻路由器 和 链路费用 ;





    六、分层次的路由选择协议



    分层次的路由选择协议 由来 :

    • 规模大 : 因特网规模很大 , 单个路由器不可能掌握所有的路由信息 ;
    • 保密性 : 很多组织对自己 网络的路由选择协议保密 , 不让外部知道具体细节 , 但还有接入因特网的需求 ;


    自治系统 ( Autonomous System ) :

    ① 自治系统 路由器 : 单一 技术管理下 的一组 路由器 ;

    ② 自治系统内部路由 : 这些 自治系统内部 路由器 使用 自治系统 内部的路由选择协议 , 和 共同的度量 , 确定分组在 自治系统 内部的路由 ;

    ③ 自治系统之间路由 : 自治系统 之间 采用相应的 自治系统之间的路由协议 ;

    ④ 管辖 : 自治系统 内部所有的网络 , 都是同一个行政单位管辖 ;

    ⑤ 连通性 : 自治系统 所有路由器必须在本自治系统 内部连通 ;



    自治系统 相关协议 :

    ① 自治系统 内部协议 : 内部网关协议 , RIP , OSPF ;

    ② 自治系统 之间协议 : 外部网关协议 , BGP-4 ;

    展开全文
  • 网络配置3:动态路由配置

    千次阅读 2018-07-05 18:28:11
    动态路由适用于什么场景?动态路由可以怎样分类?动态路由需要怎样配置?什么动态路由?动态路由的概念: 动态路由是与静态路由相对的一个概念,指路由器能够根据路由器之间的交换的特定路由信息自动地建立自己的...
  • 动态路由协议(动态路由和rip)

    千次阅读 2020-06-01 20:13:18
    动态路由协议(动态路由和rip) 动态路由协议通过路由信息的交换生成并维护转发引擎所需的路由表。...文章目录动态路由协议(动态路由和rip)动态路由动态路由概述动态路由协议基础动态路由协议分类rip路由协议rip路由
  • 动态路由RIP

    千次阅读 2019-06-09 22:02:50
    重点:1.动态路由;2.RIP路由协议工作原理 ...3)动态路由的特点:适用于网络规模大、网络拓扑复杂的网络;优点是减少管理任务、缺点是占用网络带宽。 2.动态路由协议概述:1)动态路由协议:路由器...
  • 动态路由协议

    2020-12-06 20:27:52
    动态路由的优点: 1.配置管理方便 ...注:pre值越小越好,cost值越小越好,cost值只存在于动态路由协议中 动态路由协议根据AS(自治系统-逻辑管理域)进行分类:1.IGP–内部网关协议–负责AS内部的沟通(IGP分类
  • 网络:简述路由算法之动态路由算法 在计算机网络中,路由器的一个很重要...静态路由协议是由网络管理员手动输入配置的,适用于小型的不太复杂的网络环境中,或者有特定需求的网络场景中。而动态路由协议是现代计...
  • 针对煤矿井下ZigBee无线传感器网络中节点能量补充不便的问题,提出了一种适用于井下的ZigBee路由算法。该算法通过引入邻居表,减少节点间数据传输的跳数;采用动态控制节点剩余能量阈值的方法,充分使用网络中节点的剩余...
  • 动态路由配置

    千次阅读 2018-09-15 16:16:30
    动态路由 一、实验目的及内容 深入理解动态路由协议RIP、OSPF及BGP的工作原理;理解路由器工作原理,掌握路由器相关的配置、检测操作;掌握采用动态路由协议进行网络设计的基本原则和方法。 实验内容: 1)简要...
  • 动态路由和静态路由

    千次阅读 2014-09-14 11:02:42
     静态路由是由管理员在路由器中手动配置的固定路由路由明确地指定了包到达目的地必须经过的路径,除非网络管理员干预,否则静态路由不会发生变化。静态路由不能对网络的改变作出反应,所以一般说静态路由用于网络...
  • 静态路由是指由网络管理员手工配置的路由...静态路由一般适用于比较简单的网络环境,在这样的环境中,网络管理员易于清楚地了解网络的拓扑结构,便于设置正确的路由信息。本文为大家介绍两个适合使用静态路由的实例。
  • 文章目录一、静态路由1,默认路由2,浮动路由二,动态路由 一、静态路由 静态路由(Static routing),一种路由的方式,路由项由手动配置,而非动态决定。 与动态路由不同,静态路由是固定的,不会改变,即使网络...
  • 适用于thomson系列路由

    2013-05-20 20:19:53
    路由网线连上电脑,下载上级软件,解压运行setup,找到固件路径,next,完成
  • 校园netkeeper路由适用另类破解 . 原理文档中详细写有
  • 常见动态路由协议

    万次阅读 2018-06-08 20:06:52
    动态路由协议有自己的路由算法,能够自动适应网络拓扑的变化,适用于具有一定数量三层设备的网络。缺点是配置对用户要求比较高,对系统的要求高于静态路由,并将占用一定的网络资源。 常见的动态路...
  • 网络单臂路由实验以及拓扑,了解单臂路由的特性实验,可以进行数据包的抓取以去获得单臂路由的数据流走向,结合理论更加深切了解单臂路由
  • 1、动态路由有一个什么适用场景呢? 比如在写商品详情页面的时候,页面结构都一样,只是商品id的不同,所以这个时候就可以用动态路由动态。 2、官方文档 首先我们来看看官方文档上是怎么解释动态路由的?...
  • 静态路由动态路由的区别

    千次阅读 2019-05-24 01:32:00
    1、静态路由是指由网络管理员手工配置的路由信息。...静态路由一般适用于比较简单的网络环境,在这样的环境中,网络管理员易于清楚地了解网络的拓扑结构,便于设置正确的路由信息。 2、动态路由是指路由器...
  • 静态路由动态路由

    千次阅读 2015-04-17 00:49:47
    根据路由器学习路由信息、生成并维护路由表的方法可将路由划分为三种,包括直连路由、静态路由动态路由。下面将给出三者的各自定义,并对三种路由做相关对比,以便了解它们之间的区别: 一 三种路由的划分 1 直...
  • 动态组件无法向其他组件内传递参数,而路由组件可以 动态组件适用于组件内的切换,比如登录和注册就可以动态组件,路由组件则不适用啦
  • 动态路由RIP协议!

    千次阅读 2021-04-14 19:54:21
    动态路由RIP什么是路由路由协议的分类动态路由协议的分类距离矢量路由协议选择的特点RIP的度量值RIP概述RIPV1报文格式RIPV2报文格式RIPV2相较RIPV1的改进下一跳距离矢量路由协议的防环机制 什么是路由 路由协议的...
  • 动态路由的一般配置过程,简单适用,可做参考用!!!
  • RIP动态路由协议

    千次阅读 2017-10-10 13:26:35
    动态路由协议简介 路由协议是路由器之间交互信息的一种语言。 路由协议共享网络状态和网络可达性的一些信息。 路由协议定义了一套路由器之间通信时使用的规则。 路由协议维护路由表、提供最佳转发路径。 常用的动态...
  • 此aria2_3.0.0.6插件适用于路由newifi路由器 小云3.0平台,aria2下载懂的人不解释,不懂的人请百度。自带网页管理界面。安装插件请插优盘或硬盘。
  • 动态路由协议简单理解

    千次阅读 2020-06-19 17:41:04
    一、什么是路由?       在一个网络中,路由是一...随着网络路由的发展,路由的种类有很多,如静态路由动态路由、缺省路由等。 二、路由协议的分类      &nb
  • 它使用动态编程方法来计算节点之间数据传输的可信路径,以确保可信节点之间的数据传输是可信的。 本章提出的路由机制具有开销小,可伸缩性高,易于实现项目的特点。 仿真实验表明,该路由机制具有良好的抵抗攻击...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 103,557
精华内容 41,422
关键字:

动态路由适用于