Spring-Cloud 系列第 6 篇:spring-cloud-bus

本贴最后更新于 2746 天前,其中的信息可能已经斗转星移

自学 spring-cloud 系列,越来越感觉 spring-cloud 很强大!

主要分为以下几篇:

  1. spring-cloud-config: 分布式配置管理
  2. spring-cloud-eureka: 服务注册与发现
  3. spring-cloud-eureka-consumer: 远程服务调用和及其负载均衡
  4. spring-cloud-Hystrix: 熔断器保证服务高可用
  5. spring-cloud-config-eureka-ribbon: 分布式配置管理的高可用
  6. spring-cloud-bus: 配置信息的实时更新
  7. spring-cloud-zuul: 网关基础服务

介绍

在之前的 Spring Cloud Config 的介绍中,我们还留了一个悬念:如何实现对配置信息的实时更新。

通过/refresh 接口和 Git 仓库的 Web Hook 来实现 Git 仓库中的内容修改触发应用程序的属性更新这是一个好的方法,但是我没讲,因为:若所有触发操作均需要我们手工去维护 Web Hook 中的应用位置的话,这随着系统的不断扩张,会变的越来越难以维护,而消息代理中间件是解决该问题最为合适的方案。是否还记得我们在介绍消息代理中的特点时有提到过这样一个功能:消息代理中间件可以将消息路由到一个或多个目的地。利用这个功能,我们就能完美的解决该问题,下面我们来说说 Spring Cloud Bus 中的具体实现方案。

本次使用 Rabbit MQ 来进行实验,没有使用其他消息队列。

安装 Rabbit MQ

可以参考我的文章 RabbitMQ 的安装和使用

其用户名和密码是: guest/guest

架构

这时 Spring Cloud Bus 做配置更新步骤如下:

  • 1、提交代码,利用 git 的 webhook 触发 post 请求给 bus/refresh
  • 2、server 端接收到请求并发送给 Spring Cloud Bus
  • 3、Spring Cloud bus 接到消息并通知给其它客户端
  • 4、其它客户端接收到通知,请求 Server 端获取最新配置
  • 5、全部客户端均获取到最新的配置

这样的话我们在 server 端的代码做一些改动,来支持 bus/refresh

开始之前:

我想说,项目源码使用模块编程,因为之前的版本原因,client 端注册到了 eureka 服务端,所以启动项目应该也要启动 eureka 的服务端。然后在启动 config 服务端,最后启动我们的 config-client 端,启动 config-client 要使用 profile 方法启动,这个之前我们已经使用了好多次。

修改 server 端

pom 增加如下:

        <!--消息总线-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>
        <!--config-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-monitor</artifactId>
        </dependency>

其中 bus-amqp 就是消息总线,用来利用 rabbitmq 来进行消息通讯。monnitor 就是在 server 端设置一个监听,来接收我们发送的 post 信息,告诉它我们更新了配置,你可以开始刷新已经注入的值了。

配置文件:

management.security.enabled=false

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

management.security.enabled 可以将刷新设置密码取消,因为我们是在测验,所以不需要密码。如果是你们公司内网的话,有物理隔离,应该也不需要密码。

client 端

讲道理,client 端不需要做什么修改

management.security.enabled=false 如果真的需要的话,加上这个,防止不能够刷新。

测试

访问 http://localhost:8087/hi 得到 123

修改 git 里文件的值为 2222222222

github 是有 webhook 的,你们公司私人的 git 应该也有 webhook,但是 github 的 webhook 不能访问我 localhost 呀,所以这里利用 postman 进行刷新操作来模拟 webhook

重新访问 http://localhost:8087/hi 得到 2222222222

同时,查看日志,发现值已经刷新,并且进行重新注册到了服务中心。

感觉,很酷哦!100 酷!

示例源码

所有源码在我的 github 仓库里,传送门:https://github.com/xjtushilei/spring-cloud-simples.git

支持

如果你喜欢~ 给个星

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3190 引用 • 8214 回帖 • 1 关注
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    943 引用 • 1460 回帖 • 3 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...