SpringCloud 微服务 (九) Spring Cloud Bus

本篇结合上篇学习使用SpringCloud Bus结合MQ来实现自动刷新

上篇有远端git码云,本地git,config统一配置中心服务,order服务,product服务

过程: 启动服务时,config服务将远端git的配置拉取到本地git,order服务读取config服务的配置; 启动后再修改git的配置,order中读取的配置则不变,为启动时的配置,所以需要重启,重新读取,因为没有应用通知order服务配置已经被改动了

 

消息队列有很多,本次使用RabbitMQ,就像JPA来操作数据库,SpringCloud Bus来操作RabbitMQ

config服务,order服务会通过RabbitMQ来传递信息,通知他配置已经被改动

这边还需要使用到docker容器技术,并且在docker中已经下了镜像RibbonMQ,如果不熟悉的小伙伴可以先学习一下docker,还是比较简单入手,另外docker对于现在的技术人员来说,也必须要知道,熟悉的一个技术工具,不然就落后了,比如在下,也是刚刚之前才知道这玩意

也粗糙的记录了一篇win7的docker安装 : https://my.oschina.net/u/3829444/blog/1829032

config 服务

第一步老套路,maven引入依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

第二步yml配置,在原来的基础上加rabbitmq配置

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端口是管理界面

dd40cbbc21d1b27972940f0569d34e54c2f.jpg

外部浏览器访问 如下: 

506ee9f84f78d592649ffc8b553e2e5a0d4.jpg

 

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:

b7f4df170bcd67043957208d6263b83835b.jpg

当关闭一个服务的时候,这边立刻少一个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;
    }
}

启动服务 浏览器访问 上面的接口,

712b783fc10990d352d40f0240db42e65e8.jpg

接下来, 去改动Git仓库的配置,将tom改成jerry,然后再访问浏览器的时候,发现没有变,在这里需要用到上面设置的监控,在config服务控制台中可以找到访问方式http://localhost:8000/actuator/bus-refresh

是post的请求,使用postman访问一次以后,再来刷新浏览器hello的请求,就更新了配置信息

120927c1aaf122e3724f303a87bf4aa3950.jpg

 

学到这里,我觉得有点尴尬,配置自动刷新了,那每次还要自己请求一个post,肯定有方法,从Git仓库入手,

那git上应该有做了修改自动响应的功能的应用(码云)WebHooks

其他的Git仓库应该都有,可能名字叫法不一样

3569481458ec141a84843382b6153e1db3c.jpg

上面的解释说的很清楚,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文件夹删除,不然测试的时候,会很坑

 

 

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

转载于:https://my.oschina.net/u/3829444/blog/1835264

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值