Advertisement

+RabbitMQ的整合 -- 消息总线Spring Cloud Netflix Bus

阅读量:

通过HTTP POST协议向客户端发送/refresh请求的方式能够让客户端获取到配置的最新变化信息。然而,在分布式系统环境中如果存在多个客户端都需要刷新当前配置的情况下这种做法会导致大量的客户端需要频繁刷新配置信息显得异常繁琐。有没有一种机制或方法可以让系统自动完成这一过程呢?之前我们提到过利用githook或jenkins等外部工具来进行触发操作但现在我们来探讨另一种思路即如果将refresh命令发送至config server然后由后者自动通知所有相关的config client那么就可以大大简化整个配置刷新流程。具体来说虽然仍然需要执行 refresh 命令来触发整个流程但通过使用webhook等钩子机制我们可以只需将相应的命令关联至配置中心即可无需为每个配置客户端单独进行操作这不仅提高了系统的效率也为管理维护带来了便利

目前我们计划整合消息队列RabbitMQ来实现这一目标。我们的目标在于,在git仓库中的某个配置发生更改时(即当git仓库中的某个配置发生变化时),向配置中心发送刷新指令,并随后让所有依赖于该特定配置的设备接收到相应的通知。

Spring Cloud Netflix Bus是Spring Cloud的一个重要组件——消息传输组件。当Git Repository 发生变更时,通过POST请求的方式向Config Server提交(bus)/refresh通知;Config Server会定期检查Git Repository的状态,并利用异步传输协议将最新的更新信息发送给客户端(如图所示)。

1. RabbitMQ的安装和配置的过程,这里就不赘述了。

基于第三节的程序, 配置Server和配置Client两个项目中添加一些内容, 在pom.xml文件中增加

在配置文件bootstrap.yml(config client里面是application.yml)中增加关于RabbitMQ的连接信息以及相关用户的设置:

复制代码
spring:
rabbitmq:
host: localhost
port: 5672
username: springcloud
password: 123456
复制代码
3. 以上配置高好后,配置刷新,就只需要向config server发送 /bus/refresh的POST请求就可以了.

当使用poster等方式发送POST请求时出现错误:“Full authentication is required to access this resource.” 为了修复此问题,在yml配置文件中建议添加以下设置以阻止Config server进行权限验证

management:
security:
enabled: false #忽略权限拦截

全部评论 (0)

还没有任何评论哟~