spring-cloud Finchley 微服务架构从入门到精通【六】BUS RabbitMQ 配置刷新
上篇文章介绍了高可用的配置中心,如何在不重启服务器的情况下对配置文件进行更新呢?请看下面的介绍
一、安装rabbitMq
1、下载地址
http://www.rabbitmq.com/download.html
2、运行
输入http://localhost:15672,出下以下界面,说明安装成功
3、cloud整合配置说明
默认端口: 5672
默认用户名:guest
默认密码:guest
二、代码实现
1、添加依赖
config 服务端:commonservice-config 添加如下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
在config 客户端:bussnessservice-user添加
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
2、修改配置
修改两个项目的yml文件,加入以下配置:
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
management:
endpoints:
web:
exposure:
include: "*"
cors:
allowed-origins: "*"
allowed-methods: "*"
配置说明:
rabbitmq配置
默认关闭了bus请求url,因此需要打开才能使用
在客户端bussnessservice-user的配置文件中添加一个属性server.time=update version1,用来测试属性的变更
3、在需要刷新配置的类上添加@RefreshScope注解
package com.mayi.springcloud.controller;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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 UserManagementController {
@Value("${server.port}")
String serverPort;
@Value("${server.time}")
String testValue;
@GetMapping("/listUsers")
public String ListUsers(){
/**
* 模拟从数据库查询
*/
List<Map<String, Object>> users = new ArrayList<Map<String, Object>>();
for(int i=1; i< 5; i++){
Map<String, Object> user = new HashMap<String, Object>();
user.put("id", i);
user.put("name", "小明" + i);
users.add(user);
}
return "服务器端口号: " + serverPort + " | 用户信息: " + users.toString();
}
@GetMapping("/getTestValue")
public String getTestValue(){
return testValue;
}
}
三、测试
依次启动eureka server、config server 和 config client(启动两个端口,以测试批量更新配置文件)三个项目
启动配置中心时可以看到如下日志:
- /actuator/refresh :刷新单个节点
- /actuator/bus-refresh: 刷新所有节点
启动完成:
使用postman测试:
发送Post请求 http://localhost:8801/getTestValue 和 http://localhost:8802/getTestValue
修改配置文件:
server:
port: 8802
time: update version100
发送post请求 http://localhost:8801/actuator/bus-refresh
注意:添加 spring-boot-starter-amqp 依赖有时会报错,这是因为maven里面有多个版本,需要删除,再重新maven - update project
github: https://github.com/tianyana/springcloud
接下来,我会依次更新文章,直至整个架构完成,如有兴趣的朋友关注作者 或 加我微信 拉你进入spring cloud社区群
微信公众号:java架构师修行
本公众号将要按照JAVA高级软件架构师实战培训的路线发布一期完整的架构文章,难度由浅入深,适合有一定开发基础想转架构和正在做初级架构开发的人员学习
上一篇: Lua 脚本语言(下)