SpringCloud 微服务 (九) Spring Cloud Bus

本篇结合上篇学习使用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文件夹删除,否则测试的时候,会很坑

 

 

-----------------------------------------------------------

相关文章
相关标签/搜索