注:上面这些与spring-cloud相关的属性必须配置在bootstrap.properties中,config部分内容才能被正确加载。因为bootstrap.properties的相关配置会先于application.properties,而bootstrap.properties的加载也是先于application.properties。需要注意的是eureka.client.serviceUrl.defaultZone要配置在bootstrap.properties,不然客户端是无法获取配置中心参数的,会启动失败!
application.properties配置文件新增的配置基本和服务端的一样,完整的配置如下:
spring.application.name=springcloud-config-bus-client server.port=9006 management.endpoints.web.exposure.include=refresh spring.cloud.config.failFast=true spring.cloud.bus.trace.enabled = true spring.rabbitmq.host:127.0.0.1 spring.rabbitmq.port:5672 spring.rabbitmq.username:guest spring.rabbitmq.password:guest配置说明:
spring.application.name: 这个是指定服务名称。
server.port:服务指定的端口。
management.endpoints.web.exposure.include:暴露刷新的地址。
spring.cloud.bus.enabled:是否启用springcloud config bus。
spring.cloud.bus.trace.enabled:开启跟踪总线事件。
spring.rabbitmq.host: rabbitmq的地址。
spring.rabbitmq.port: rabbitmq的端口。
spring.rabbitmq.username: rabbitmq的用户名。
spring.rabbitmq.password: rabbitmq的密码。
程序主类代码,和之前的基本一致。代码如下:
主程序代码示例:
@EnableDiscoveryClient @SpringBootApplication public class ConfigClientApplication { public static void main(String[] args) { SpringApplication.run(ConfigClientApplication.class, args); System.out.println("配置中心客户端启动成功!"); } }控制层代码:
@RestController @RefreshScope public class ClientController { @Value("${word}") private String word; @RequestMapping("/hello") public String index(@RequestParam String name) { return name+","+this.word; } }完成上述的项目开发之后,我们把上面的项目复制一下,项目名称为springcloud-config-bus-client2,然后把它的端口改为9007即可。
到此,客户端的项目也就构建完成了。
功能测试完成如上的工程开发之后,我们来进行测试。
我们首先启动RabbitMQ服务,然后再依次启动springcloud-config-bus-eureka、springcloud-config-bus-server、springcloud-config-bus-client和springcloud-config-bus-client2这四个项目。其中9005是服务端springcloud-config-bus-server的端口,9006是第一个客户端springcloud-config-bus-client的端口,9007是是第二个客户端springcloud-config-bus-client2的端口。
全局刷新测试启动成功之后,在浏览器输入:
:9006//hello?name=pancm
界面返回:
pancm,hello在浏览器输入:
:9007//hello?name=xuwujing
界面返回:
xuwujing,hello可以正常得到服务端configtest-pro.properties的配置信息。
然后在把configtest-pro.properties的配置更改为:
word=hello!!然后在使用Postman工具进行发起POST请求,只不过这次的地址是服务端的地址和端口。
使用POST请求如下地址:
:9005/actuator/bus-refresh
然后我们再浏览器输入:
:9006//hello?name=pancm
界面返回:
pancm,hello!!浏览器输入:
:9007//hello?name=pancm
界面返回:
xuwujing,hello!!示例图:
局部刷新测试
完成上述全局刷新测试之后,有时我们只想刷新部分微服务的配置,那么便可以使用/actuator/bus-refresh/{destination}端点的 destination 参数来定位要刷新的应用程序。
我们继续更改configtest-pro.properties的配置为:
word=hello!!!然后依旧使用Postman工具发送post请求,地址为:
:9005/actuator/bus-refresh/springcloud-config-bus-client2
然后我们再浏览器输入:
:9006//hello?name=pancm
界面返回:
pancm,hello!!浏览器输入:
:9007//hello?name=pancm
界面返回:
xuwujing,hello!!!发现只有springcloud-config-bus-client2客户端的配置更新,另一个springcloud-config-bus-client没有进行刷新,达到了我们的目的。
示例图: