本篇结合上篇学习使用SpringCloud Bus结合MQ来实现自动刷新java
上篇有远端git码云,本地git,config统一配置中心服务,order服务,product服务git
过程: 启动服务时,config服务将远端git的配置拉取到本地git,order服务读取config服务的配置; 启动后再修改git的配置,order中读取的配置则不变,为启动时的配置,因此须要重启,从新读取,由于没有应用通知order服务配置已经被改动了github
消息队列有不少,本次使用RabbitMQ,就像JPA来操做数据库,SpringCloud Bus来操做RabbitMQweb
config服务,order服务会经过RabbitMQ来传递信息,通知他配置已经被改动spring
这边还须要使用到docker容器技术,而且在docker中已经下了镜像RibbonMQ,若是不熟悉的小伙伴能够先学习一下docker,仍是比较简单入手,另外docker对于如今的技术人员来讲,也必需要知道,熟悉的一个技术工具,否则就落后了,好比在下,也是刚刚以前才知道这玩意docker
也粗糙的记录了一篇win7的docker安装 : http://www.javashuo.com/article/p-hkyrgqaw-et.html数据库
config 服务浏览器
第一步老套路,maven引入依赖app
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> </dependency>
第二步yml配置,在原来的基础上加rabbitmq配置maven
spring: application: name: config cloud: config: server: git: uri: https://gitee.com/daxia/spring-cloud-config username: daxia@foxmail.com password: 123456 basedir: E:\MyCloud\config\basedir rabbitmq: host: 192.168.99.100 port: 5672 username: guest password: guest virtual-host: / eureka: client: service-url: defaultZone: http://localhost:8761/eureka
docker 容器
启动RabbitMQ命令 : docker run -d --hostname myrabbitmq -p 5672:5672 -p 15672:15672 hub.c.163.com/library/rabbitmq:management
第一个5672端口是rabbitmq,第二个15672端口是管理界面
外部浏览器访问 以下:
order 服务
order服务同config服务同样,引入依赖,而后yml配置,贴出来
spring: application: name: order cloud: config: discovery: enabled: true service-id: CONFIG profile: dev rabbitmq: host: 192.168.99.100 port: 5672 username: guest password: guest virtual-host: / eureka: client: service-url: defaultZone: http://localhost:8761/eureka/
而后rabbitmq management访问,以下 就出现两个队列,一个是config,一个是order:
当关闭一个服务的时候,这边马上少一个queues,能够试试
下面来测试测试 改变Git仓库的配置来自动更新服务
在Git仓库的order-dev.yml中 追加点东西:
hello: tom
在config服务中,须要在yml配置中加入监控设置(这个设置是SpringBoot2有改动部分)
spring: application: name: config cloud: config: server: git: uri: https://gitee.com/daxia/spring-cloud-config username: daxia@foxmail.com password: 123456 basedir: E:\MyCloud\config\basedir rabbitmq: host: 192.168.99.100 port: 5672 username: guest password: guest virtual-host: / eureka: client: service-url: defaultZone: http://localhost:8761/eureka #本次追加 management: endpoints: web: exposure: include: "bus-refresh"
接下来,在order服务中,写一个Controller中获取该配置,须要@RefreshScope注解刷新
@RestController @RefreshScope public class HelloController { @Value("${hello}") private String hello; @GetMapping("/hello") public String hello() { return hello; } }
启动服务 浏览器访问 上面的接口,
接下来, 去改动Git仓库的配置,将tom改为jerry,而后再访问浏览器的时候,发现没有变,在这里须要用到上面设置的监控,在config服务控制台中能够找到访问方式http://localhost:8000/actuator/bus-refresh
是post的请求,使用postman访问一次之后,再来刷新浏览器hello的请求,就更新了配置信息
学到这里,我以为有点尴尬,配置自动刷新了,那每次还要本身请求一个post,确定有方法,从Git仓库入手,
那git上应该有作了修改自动响应的功能的应用(码云)WebHooks
其余的Git仓库应该都有,可能名字叫法不同
上面的解释说的很清楚,push代码,能够post一个请求,恰好能够知足需求
访问的地址是: http://localhost:8000/actuator/bus-refresh
localhost确定是写不上去的,若是写上去了就说明你超神了,这边须要一个公网的地址
须要内网穿透的小工具,来完成此次测试,映射url到本地,(分享natapp.cn,根据本身的系统下载)
用其余穿透工具的也能够,好比花生壳...百度搜内网穿透,就一大堆了
最后测试的时候,发现开源中国的码云和SpringCloud彷佛不太兼容,失败了, 换成github就能够了.
在使用github的时候,cloud专用的一个访问/monitor 好比url: http://hello.natappfree.cc/monitor
换成github的时候,须要将以前conifg服务中的basebir文件夹删除,否则测试的时候,会很坑
-----------------------------------------------------------