分布式协调工具(三)--ookeeper实现分布式配置中心

什么是分布式配置中心

项目中配置文件比较繁杂,而且不同环境的不同配置修改相对频繁,每次发布都需要对应修改配置,如果配置出现错误,需要重新打包发布,时间成本较高,因此需要做统一的分布式注册中心,能做到自动更新配置文件信息,解决以上问题。

常用分布式配置中心框架

首选为disconf,可支持KV存储以及配置文件形式存储,使用和开发更为简便。并且本身也是基于zookpeer的分布式配置中心开发,方便部署使用,并且支持实时更新通知操作,但是部署相对复杂。

Diamond(daɪəmənd)基本可以放弃,一般做KV的存储配置项,做配置文件不是很好的选择。

Spring Cloud Config因为依赖git,使用局限性较大,需要在各个环境中安装git,并且不支持KV存储,功能方面略差于disconf

基于Zookeeper实现分布式配置中心

application.yml

itmayiedu:

  key: yushengjun

 ConfigUtils

@Data
@Component
public class ConfigUtils {
	@Value("${itmayiedu.key}")
	private String itmayieduKey;
}

MyApplicationRunner

@Component
public class MyApplicationRunner extends BaseZookeeper implements ApplicationRunner {
	@Autowired
	private ConfigUtils configUtils;
	// 启动后执行方法
	public void run(ApplicationArguments args) throws Exception {
		System.out.println("项目启动成功...");
		String itmayieduValue = configUtils.getItmayieduKey();
		String itmayieduKey = "/itmayieduKey";
		try {
			// 创建节点信息
			zkClient.createEphemeral(itmayieduKey, itmayieduValue);
		} catch (Exception e) {
			e.printStackTrace();
		}
		zkClient.subscribeDataChanges(itmayieduKey, new IZkDataListener() {
			public void handleDataDeleted(String dataPath) throws Exception {
			}
			// 当值发生变化的时候
			public void handleDataChange(String dataPath, Object data) throws Exception {
				System.out.println("dataPath:" + dataPath + ",data:" + data);
				final String strData = (String) data;
				configUtils.setItmayieduKey(strData);
			}
		});

	}

}

UpdateInfoService

@Service
public class UpdateInfoService extends BaseZookeeper {
	public String updateInfo(String key, String value) {
		try {
			zkClient.writeData("/" + key, value);
			return "success";
		} catch (Exception e) {
			return "fail";
		}
	}
}

IndexController

@RestController
public class IndexController {
	@Autowired
	private ConfigUtils configUtils;
	@Autowired
	private UpdateInfoService updateInfoService;

	@RequestMapping("/getInfo")
	public String getInfo() {
		return configUtils.getItmayieduKey();
	}

	@RequestMapping("/updateInfo")
	public String updateInfo(String key, String value) {
		String updateInfo = updateInfoService.updateInfo(key, value);
		return updateInfo;
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值