一次zuul网关配置探究

2018-08-25  本文已影响0人  夜说时间鱼

使用过zuul网关的都知道,网关的路由是这样配置的:

网关配置

即在配置文件routes下配置一系类的映射关系。但是这样会出现一个问题,需要修改配置的时候怎么处理?因为在生产环境中,可不像测试环境那样随便,想重启服务器就重启服务器。

因此,spring引入了spring cloud config server,目的是为了在程序运行刷新微服务配置。

官网的一篇说明:https://spring.io/guides/gs/centralized-configuration/

官网截图

所以呢,要程序运行时刷新配置文件,需要经历以下步骤:(内容来自官方说明)

1、启动一个配置中心。

spring cloud config配置请查看官网说明

2、启动另外一个微服务项目,消费配置中心配置。具体内容查请看官网

官网截图

3、通过发送刷新请求,通知目标客户端刷新配置

官网截图

从这种模式可以发现几个问题:

1、能否不通过http请求刷新,对于一个多实例微服务的项目,难道每次修改都发送几个http请求,针对具体的客户端刷新吗。即便可以在server端利用发送http请求的jar包进行操作,这不是同时也说明了还需要额外维护需要刷新项目的http访问信息吗?而发送http请求的目标主机不是恒久不变的,往往有项目会进行迁移,结果就是频繁的修改配置。

2、spring cloud server没有可视化的统一配置界面。虽然现在流行devops开发运维一体化,但是每次都到git或者其他地方修改配置文件,过程是有点痛苦的。

3、如果spring cloud server的配置需要根据系统本身权限进行控制,git或svn之类权限体系,比较难和系统本身的权限体系协调。

4、每个可以修改的配置属性,都需要在方法或者类上添加@RefreshScope注解,代码比较分散。

-------------------------------------------------------解决问题分割线---------------------------------------------------

Spring cloud server官方文档

https://cloud.spring.io/spring-cloud-config/single/spring-cloud-config.html

针对问题一:可以引入消息插件。所有多实例的微服务项目监听同一个消息源。当修改时,通过消息事件传递变化。参考:https://www.cnblogs.com/ityouknow/p/6931958.html

图片来自 https://www.cnblogs.com/ityouknow/p/6931958.html

针对问题二、三:spring cloud config支持jdbc数据库配置。

官网截图

但也没有可视化操作界面提供。不过针对系统本身的数据库增删改查进行权限控制,起码会比git或svn那边重新配一套权限体系容易得多。Spring cloud config jdbc配置,参考 https://blog.csdn.net/tian6318/article/details/79091372

针对问题四:查看源码后,会发现刷新配置比想象中的复杂。其中涉及spring bean的重新创建与销毁。参考https://blog.csdn.net/cml_blog/article/details/78411312

    整理后的代码地址:https://github.com/sale-oranges-xyz/sale-oranges-xyz

上一篇下一篇

猜你喜欢

热点阅读