Spring Cloud【Finchley】实战-06使用/actuator/bus-refresh端点手动刷新配置 + 使用Spring Cloud Bus自动更新配置 - Go语言中文社区

Spring Cloud【Finchley】实战-06使用/actuator/bus-refresh端点手动刷新配置 + 使用Spring Cloud Bus自动更新配置


概述

Spring Cloud实战-05配置中心的搭建(配合使用Eureka)和Config Server高可用 中的遗留问题:不能自动更新配置。

这里我们将介绍手动和自动两种方式来更新配置

在这里插入图片描述

在这里插入图片描述

上图的架构将Config Server也纳入到了消息总线中,并使用Config Server的/actuator/bus-refresh端点来实现配置的刷新。 这样做的好处就是,各个微服务仅仅需要关注自身的业务,而不需要承担刷新配置的职责了。


特别注意版本信息

spring-boot-starter-parent: 2.0.3.RELEASE
spring-cloud.version:Finchley.RELEASE


使用@RefreshScope + /actuator/bus-refresh端点手动刷新配置

事实上,手动刷新其实并不需要接入消息对了,@RefreshScope是关键。这里是为了下面做自动刷新才引入了消息队列.


Step1. 添加依赖

根据上图的描述我们知道 Config Server和微服务都需要接入到消息队列中

artisan-config(Config Server) 配置中心服务端 pom文件引入依赖

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

artisan-order (同时也是config client)同样的也需要加入上述依赖

在这里插入图片描述


Step2. 配置RabbitMQ信息

artisan-config (Config Server) 的 application.yml增加 RabbitMQ的配置信息如下

在这里插入图片描述

artisan-order(Config Client) 的配置文件增加 RabbitMQ的配置信息如下

这里我放到了远端的Git
在这里插入图片描述

通过config server 访问artisan order 使用的配置文件dev分支的信息
在这里插入图片描述


Step3. Config Server暴露/actuator/bus-refresh端点

根据上面的架构,我们是通过Config Server暴露出来的endpoints来请求Config Server ,所以需要在Config Server暴露端点,这里我们设置默认全部暴露出来

确保依赖中有spring-boot-starter-actuator 。 因为 spring-cloud-config-server依赖了spring-boot-starter-actuator ,故无需重复引用。

在这里插入图片描述

#actuator  启用所有的监控端点 “*”号代表启用所有的监控端点,可以单独启用,例如,health,info,metrics
#  spring boot 升为 2.0 后,为了安全,默认 Actuator 只暴露了2个端点,heath 和 info
management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: ALWAYS

在这里插入图片描述

当访问这些端点无效时,可以重启下应用,观察启动日志,看是否加载了对应的endpoints信息

在这里插入图片描述


Step4. 启动RabbitMQ的Docker镜像

[root@artisan ~]# docker run -d --hostname my-rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.7.8-management
e287474e3ce40746819738c079bf32604536c122e2d9cba938269f9c71a09fd1

可参考: Docker-Centos7安装Docker CE 及在Docker CE中安装RabbitMQ


Step5. 启动artisan config server微服务

启动成功后,访问 http://localhost:8762/
在这里插入图片描述

登录RabbitMQ查看

可以看到artisan config自动创建了一个队列 。 (观察启动日志,可以看到创建过程 )

在这里插入图片描述


Step6. 启动artisan order 微服务

启动成功后查看注册中心
在这里插入图片描述

同时,看下消息队列中的队列

在这里插入图片描述

artisan-order微服务连接RabbitMQ,也自动创建了一个消息队列。

artisan-order的启动日志

declaring queue for inbound: springCloudBus.anonymous.jd0h4ldGRi-Aw7MWHDbdug, bound to: springCloudBus
DiscoveryClient_ARTISAN-ORDER/localhost:artisan-order:8081 - registration status: 204
Channel 'artisan-order-1-1.springCloudBus.anonymous.jd0h4ldGRi-Aw7MWHDbdug.errors' has 1 subscriber(s).
Channel 'artisan-order-1-1.springCloudBus.anonymous.jd0h4ldGRi-Aw7MWHDbdug.errors' has 2 subscriber(s).
started inbound.springCloudBus.anonymous.jd0h4ldGRi-Aw7MWHDbdug

Step7. Artisan Order中写个测试类 验证自动刷新

@RefreshScope 重点是这个注解

package com.artisan.order.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope
public class ConfigClientController {

    @Value("${env}")
    private String env;

    @GetMapping("/env")
    public String getValueFromGit(){
        return env;
    }
}

现在远端Git上的配置为 dev2
在这里插入图片描述

通过artisan-order 访问下 http://localhost:8081/env

现在将env的值修改为 dev2-artisan

在这里插入图片描述

再次访问下 http://localhost:8081/env

在这里插入图片描述

还是。。。。

居然没有变化,手工刷新下吧 ,同时观察artisn config 和 artisan order微服务的日志

 curl -v -X  POST http://localhost:9898/actuator/bus-refresh

在这里插入图片描述

我们从上面的架构中可以知道,对外提供刷新端点的是Config Server微服务,所以POST请求到 Config Server这个为服务上。

再次访问 http://localhost:8081/env

在这里插入图片描述

可以看到已经更新为修改后的值了。


首先看下artisan-config(Config Server端)

2019-04-09 19:46:54.895  INFO 22752 --- [nio-9898-exec-5] o.s.a.r.c.CachingConnectionFactory       : Attempting to connect to: [10.72.38.235:5672]
2019-04-09 19:46:54.899  INFO 22752 --- [nio-9898-exec-5] o.s.a.r.c.CachingConnectionFactory       : Created new connection: rabbitConnectionFactory.publisher#41b8bdb3:0/SimpleConnection@2f5a0df8 [delegate=amqp://guest@10.72.38.235:5672/, localPort= 61369]
2019-04-09 19:46:54.902  INFO 22752 --- [nio-9898-exec-5] o.s.amqp.rabbit.core.RabbitAdmin         : Auto-declaring a non-durable, auto-delete, or exclusive Queue (springCloudBus.anonymous.Hn7DXYSmSB-NAptg8TXPJQ) durable:false, auto-delete:true, exclusive:true. It will be redeclared if the broker stops and is restarted while the connection factory is alive, but all messages will be lost.
2019-04-09 19:46:56.280  INFO 22752 --- [nio-9898-exec-5] o.s.cloud.commons.util.InetUtils         : Cannot determine local hostname
2019-04-09 19:46:56.338  INFO 22752 --- [nio-9898-exec-5] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@50eb43d8: startup date [Tue Apr 09 19:46:56 CST 2019]; root of context hierarchy
2019-04-09 19:46:56.385  INFO 22752 --- [nio-9898-exec-5] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
2019-04-09 19:46:56.406  INFO 22752 --- [nio-9898-exec-5] trationDelegate$BeanPostProcessorChecker : Bean 'configurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$2a1d7182] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2019-04-09 19:46:57.821  INFO 22752 --- [nio-9898-exec-5] o.s.cloud.commons.util.InetUtils         : Cannot determine local hostname
2019-04-09 19:46:57.875  INFO 22752 --- [nio-9898-exec-5] o.s.boot.SpringApplication               : No active profile set, falling back to default profiles: default
2019-04-09 19:46:57.879  INFO 22752 --- [nio-9898-exec-5] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@413aa17: startup date [Tue Apr 09 19:46:57 CST 2019]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@50eb43d8
2019-04-09 19:46:57.882  INFO 22752 --- [nio-9898-exec-5] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
2019-04-09 19:46:57.892  INFO 22752 --- [nio-9898-exec-5] o.s.boot.SpringApplication               : Started application in 2.973 seconds (JVM running for 1066.868)
2019-04-09 19:46:57.892  INFO 22752 --- [nio-9898-exec-5] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@413aa17: startup date [Tue Apr 09 19:46:57 CST 2019]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@50eb43d8
2019-04-09 19:46:57.892  INFO 22752 --- [nio-9898-exec-5] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@50eb43d8: startup date [Tue Apr 09 19:46:56 CST 2019]; root of context hierarchy
2019-04-09 19:46:58.069  INFO 22752 --- [nio-9898-exec-5] com.netflix.discovery.DiscoveryClient    : Shutting down DiscoveryClient ...
2019-04-09 19:46:58.073  INFO 22752 --- [nio-9898-exec-5] o.s.c.n.eureka.InstanceInfoFactory       : Setting initial instance status as: STARTING
2019-04-09 19:47:00.478  INFO 22752 --- [nio-9898-exec-5] com.netflix.discovery.DiscoveryClient    : Unregistering ...
2019-04-09 19:47:00.488  INFO 22752 --- [nio-9898-exec-5] com.netflix.discovery.DiscoveryClient    : DiscoveryClient_ARTISAN-CONFIG/localhost:artisan-config:9898 - deregister  status: 200
2019-04-09 19:47:00.502  INFO 22752 --- [nio-9898-exec-5] com.netflix.discovery.DiscoveryClient    : Completed shut down of DiscoveryClient
2019-04-09 19:47:00.509  INFO 22752 --- [nio-9898-exec-5] com.netflix.discovery.DiscoveryClient    : Initializing Eureka in region us-east-1
2019-04-09 19:47:00.512  INFO 22752 --- [nio-9898-exec-5] c.n.d.provider.DiscoveryJerseyProvider   : Using JSON encoding codec LegacyJacksonJson
2019-04-09 19:47:00.512  INFO 22752 --- [nio-9898-exec-5] c.n.d.provider.DiscoveryJerseyProvider   : Using JSON decoding codec LegacyJacksonJson
2019-04-09 19:47:00.512  INFO 22752 --- [nio-9898-exec-5] c.n.d.provider.DiscoveryJerseyProvider   : Using XML encoding codec XStreamXml
2019-04-09 19:47:00.512  INFO 22752 --- [nio-9898-exec-5] c.n.d.provider.DiscoveryJerseyProvider   : Using XML decoding codec XStreamXml
2019-04-09 19:47:00.591  INFO 22752 --- [nio-9898-exec-5] c.n.d.s.r.aws.ConfigClusterResolver      : Resolving eureka endpoints via configuration
2019-04-09 19:47:00.591  INFO 22752 --- [nio-9898-exec-5] com.netflix.discovery.DiscoveryClient    : Disable delta property : false
2019-04-09 19:47:00.591  INFO 22752 --- [nio-9898-exec-5] com.netflix.discovery.DiscoveryClient    : Single vip registry refresh property : null
2019-04-09 19:47:00.591  INFO 22752 --- [nio-9898-exec-5] com.netflix.discovery.DiscoveryClient    : Force full registry fetch : false
2019-04-09 19:47:00.591  INFO 22752 --- [nio-9898-exec-5] com.netflix.discovery.DiscoveryClient    : Application is null : false
2019-04-09 19:47:00.591  INFO 22752 --- [nio-9898-exec-5] com.netflix.discovery.DiscoveryClient    : Registered Applications size is zero : true
2019-04-09 19:47:00.591  INFO 22752 --- [nio-9898-exec-5] com.netflix.discovery.DiscoveryClient    : Application version is -1: true
2019-04-09 19:47:00.591  INFO 22752 --- [nio-9898-exec-5] com.netflix.discovery.DiscoveryClient    : Getting all instance registry info from the eureka server
2019-04-09 19:47:00.597  INFO 22752 --- [nio-9898-exec-5] com.netflix.discovery.DiscoveryClient    : The response status is 200
2019-04-09 19:47:00.597  INFO 22752 --- [nio-9898-exec-5] com.netflix.discovery.DiscoveryClient    : Starting heartbeat executor: renew interval is: 30
2019-04-09 19:47:00.597  INFO 22752 --- [nio-9898-exec-5] c.n.discovery.InstanceInfoReplicator     : InstanceInfoReplicator onDemand update allowed rate per min is 4
2019-04-09 19:47:00.597  INFO 22752 --- [nio-9898-exec-5] com.netflix.discovery.DiscoveryClient    : Discovery Client initialized at timestamp 1554810420597 with initial instances count: 2
2019-04-09 19:47:00.601  INFO 22752 --- [nio-9898-exec-5] o.s.c.n.e.s.EurekaServiceRegistry        : Unregistering application artisan-config with eureka with status DOWN
2019-04-09 19:47:00.601  INFO 22752 --- [nio-9898-exec-5] o.s.c.n
                        
                        
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/yangshangwei/article/details/89117473
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢