关于网关路由信息放入Redis的一些思考

本文探讨了在微服务架构中,如何利用Redis实现网关路由信息的动态管理和同步。相较于静态配置或数据库加载,Redis提供了更灵活的更新方案。当路由信息变更时,通过Redis的发布订阅机制,业务代码可以即时更新路由并通知网关,避免手动修改和业务耦合。这种方法确保了信息的准确性和系统的解耦性。
摘要由CSDN通过智能技术生成

关于微服务将网关路由信息放到redis中的一些思考

一直有一个疑问,我们的springcloud gateway 路由信息应该是放在网关内存中,然后请求打过来经过网关,从内存中找到路由信息,进行路由转发,那么为什么有把路由信息放到redis中这么一说呢?

网关加载路由信息可以加载静态yml文件,或直接写死在代码中,也可从数据库中进行加载,最终都要变成RouteDefinition对象,放在内存中供请求过来查找转发使用,也就是说这种情况是,路由信息确定不会变的情况下,我们可以把路由信息存入数据库,每次启动从数据库中加载到网关内存中。

如果是使用spring cloud config配置中心的话,并且路由信息是放在yml或者数据库中的,如果路由信息发生改变,那么可以通过消息总线的方式让网关重新加载。访问配置中心的/refresh 端点。或者直接调用网关的刷新节点重新加载路由。
我个人认为上面这种方式有点繁琐。特别是在大型分布式微服务环境下,你要手动去修改一个个的路由信息吗?显然不可能。

在来说说用nacos,基于nacos的配置,是把路由信息放到nacos中,每次启动gateway从nacos配置文件中读取路由信息,当路由配置信息修改后,使用nacos的回调 更新路由信息。看似方便不少,但是还是存在手动修改路由信息这个问题。因为人很容易犯错的。

一般的我们把路由信息存放到数据库中,在前台可视化界面中修改路由信息就比我们手动改一个个的配置文件要可靠的多。一旦我们前台更新了路由信息,可以通过调用网关服务来从数据库中进行更新。这样做看上去没什么问题(个人认为), 但是就会使我们的业务代码和网关服务产生耦合。同步问题到是解决了。更好的方法是什么呢?

在这里插入图片描述
使用redis做信息同步,并且解决了网关和业务代码的耦合。
启动业务代码从数据库中加载路由信息,并把路由信息存入redis,网关第一次启动先从redis指定Key中加载路由信息,如果业务代码修改路由信息,那么业务 代码先把数据库路由信息更新,并更新redis路由信息,通过redis发布订阅模式通知网关,网关清除内存中的路由信息,然后当请求过来的时候,先查看内存中是否有路由信息,如果为null,从redis中加载路由信息到内存,继续提供服务。

这样做就可有实现解耦和信息同步,当然如果仅仅是这个作用使用redis确实是大材小用了,这里只是说一下网关路由信息放到redis中有什么好处。纯手敲,有什么不对的欢迎指出,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值