社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
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是关键。这里是为了下面做自动刷新才引入了消息队列.
根据上图的描述我们知道 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)同样的也需要加入上述依赖
artisan-config (Config Server) 的 application.yml增加 RabbitMQ的配置信息如下
artisan-order(Config Client) 的配置文件增加 RabbitMQ的配置信息如下
这里我放到了远端的Git
通过config server 访问artisan order 使用的配置文件dev分支的信息
根据上面的架构,我们是通过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信息
[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
启动成功后,访问 http://localhost:8762/
登录RabbitMQ查看
可以看到artisan config自动创建了一个队列 。 (观察启动日志,可以看到创建过程 )
启动成功后查看注册中心
同时,看下消息队列中的队列
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
@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
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!