推荐 Spring Cloud 视频:
Spring Cloud Config Server和Spring Cloud Bus以及Kafka和数据库动态刷新配置
Spring cloud config server如果不结合Spring cloud bus,那么就无法实现动态更新,只能重启服务才能生效新的配置,比如我们的注册服务器(Eureka)是整个Spring cloud系统中的单点风险,在正常运营过程中或测试环境切换到正式环境时,我们准备了两套注册服务器,希望在这两者之间不停机进行动态切换。
Spring cloud bus支持RabbitMQ和Kafka两种方式,RabbitMQ安装需要先安装erlang,linux和windows下erlang安装方式不一样,linux下需要源码编译,如果缺失组件需要升级,会折腾半天,而Kafka直接下载压缩包用Java命令启动即可,且支持事务性消息,其日志方式的机制更灵活强大,可以根据CAP定理在高可用性和高一致性灵活选择,当然用在配置更新方面是可用性重要还是一致性重要,这与注册服务器考量原则是一样的,服务注册一定是注重高可用性,而不是高一致性,如果这个问题不考虑清楚,设计再强大的分布式注册框架也是走错方向。配置更新方面使用异步总线其实已经是一种最终一致性,但是这种最终一致性也不能不一致时间太长,否则影响功能正常运行,比如1000个服务中已经有800个服务改变到新的注册服务器配置,而其他200个还没有,在这种情况下,两者之间存在相互找不到对方,网络存在分区了,业务上是否容许?当然Kafka会将这种不一致延迟降低到最低。
废话少说,Spring cloud配置服务器和其客户端之间通讯如果系统通过Spring cloud bus很简单,只要在pom.xml增加: