• Ever
    2022-05-21
    没明白为啥不直接在nacos上用spring.cloud.gateway.routes配置项配置路由,明明本身就支持动态刷新,哪里需要画蛇添足自定义监听配置和刷新路由。 RefreshRoutesEvent 事件会触发路由刷新,这一步本身就比较耗CPU(可以自己抓个火焰图),这里在forEach里还不停触发是否合理(放在循环外面不是更好)。

    作者回复: 文中我特意提到“我这里我不打算使用 @RefreshScope 来获取 Nacos 动态参数了”,前者Nacos动态属性是很容易就能想到的方案,前面章节也都学过了,所以为了兼具演示Nacos Config实现监听的原理和过程,才用了一套可以更加灵活做自定义配置的listener。

    共 5 条评论
    10
  • theodore
    2022-04-07
    我们的路由是自己实现的前后端分离的服务,增删改查都在上面操作 没有依靠nacos config

    作者回复: 这个吊炸天,大中台路由:)

    
    4
  • peter
    2022-02-14
    请教老师四个问题啊: Q1:Gateway内置的actuator endpoint是Gateway独有的?还是具有通用性?比如其他的组件(e.g,nacos)也可以加入actuator endpoint? Q2:DynamicRoutesListener是观察者模式吗? Q3:DynamicRoutesLoader是把Nacos中的文件“routes-config.json”读取过来吗?(相当于跨进程或跨机器传输文件) Q4:在middleware下面的Gateway这个module本身是个独立的服务,它不同于Gateway组件,对吗? 如果是这样,GatewayService是定义在Gateway这个服务中的,GatewayService要把路由信息更新到Gateway组件的上下文中,是通过跨进程或跨机器通信,对吗?

    作者回复: Q1:通用规范接口,理念类似于jmx Q2:设计模式是微观层面的实现,很难把某个功能归类到设计模式上。只能说表现方式上是observer,但底层实现复杂得多 Q3:读取文件内容 Q4:gatewayserv是gateway这个module的一个类,和templateserv->Template模块这个所属关系一样

    
    1
  • so long
    2022-03-01
    请教老师一个问题:publisher.publishEvent(new RefreshRoutesEvent(this));这行代码是必须的吗?我自己测试的时候执行该行代码后就卡主不会往下执行了,然后我注释掉该行代码,也可以实现路由的动态刷新。

    作者回复: RefreshRoutesEvent做了很多善后的事儿,比如说清理cache啊之类的,还有很多类似的注解,比如@RefreshScope注解背后也会发布一个Event,他们背后都有不少的其它支线任务

    共 4 条评论
    
  • 安静的美男子
    2023-04-25 来自上海
    看起来没有支持路由删除的场景,updateRoutes 实现的只支持新增、修改,不支持删除呀,如果删除了路由会不起效
    
    