zookeeper【1】配置管理
程序员文章站
2022-05-25 19:58:26
为什么要用统一配置? 我们做项目时用到的配置比如数据库配置等...我们都是写死在项目里面,如果需要更改,那么也是的修改配置文件然后再投产上去,那么问题来了,如果做集群的呢,有100台机器,这时候做修改那就太不切实际了;那么就需要用到统一配置管理啦。 采用方案 1.公共配置抽取存放于zookeeper ......
为什么要用统一配置?
我们做项目时用到的配置比如数据库配置等...我们都是写死在项目里面,如果需要更改,那么也是的修改配置文件然后再投产上去,那么问题来了,如果做集群的呢,有100台机器,这时候做修改那就太不切实际了;那么就需要用到统一配置管理啦。
采用方案
1.公共配置抽取存放于zookeeper中并落地数据库
2.对公共配置修改后发布到zookeeper中并落地数据库
3.对应用开启配置实时监听,zookeeper配置文件一旦被修改,应用可实时监听到并获取
实现代码:
import java.io.serializable; public class config implements serializable{ /** * */ private static final long serialversionuid = 1l; private string usernm; private string userpw; public config() { } public config(string usernm, string userpw) { this.usernm = usernm; this.userpw = userpw; } public string getusernm() { return usernm; } public void setusernm(string usernm) { this.usernm = usernm; } public string getuserpw() { return userpw; } public void setuserpw(string userpw) { this.userpw = userpw; } @override public string tostring() { return "config [usernm=" + usernm + ", userpw=" + userpw + "]"; } }
import org.i0itec.zkclient.zkclient; public class zkconfigmag { private config config; /** * 从数据库加载配置 */ public config downloadconfigfromdb(){ //getdb config = new config("nm", "pw"); return config; } /** * 配置文件上传到数据库 */ public void uploadconfigtodb(string nm, string pw){ if(config==null)config = new config(); config.setusernm(nm); config.setuserpw(pw); //updatedb } /** * 配置文件同步到zookeeper */ public void syncconfigtozk(){ zkclient zk = new zkclient("localhost:2181"); if(!zk.exists("/zkconfig")){ zk.createpersistent("/zkconfig",true); } zk.writedata("/zkconfig", config); zk.close(); } }
public class zkconfigtest { public static void main(string[] args) { zkconfigmag mag = new zkconfigmag(); config config = mag.downloadconfigfromdb(); system.out.println("....加载数据库配置...."+config.tostring()); mag.syncconfigtozk(); system.out.println("....同步配置文件到zookeeper...."); //歇会,这样看比较清晰 try { thread.sleep(10000); } catch (interruptedexception e) { // todo auto-generated catch block e.printstacktrace(); } mag.uploadconfigtodb("ccccc", "ppppp"); system.out.println("....修改配置文件...."+config.tostring()); mag.syncconfigtozk(); system.out.println("....同步配置文件到zookeeper...."); } }
import org.i0itec.zkclient.izkdatalistener; import org.i0itec.zkclient.zkclient; public class zkgetconfigclient { private config config; public config getconfig() { zkclient zk = new zkclient("localhost:2181"); config = (config)zk.readdata("/zkconfig"); system.out.println("加载到配置:"+config.tostring()); //监听配置文件修改 zk.subscribedatachanges("/zkconfig", new izkdatalistener(){ @override public void handledatachange(string arg0, object arg1) throws exception { config = (config) arg1; system.out.println("监听到配置文件被修改:"+config.tostring()); } @override public void handledatadeleted(string arg0) throws exception { config = null; system.out.println("监听到配置文件被删除"); } }); return config; } public static void main(string[] args) { zkgetconfigclient client = new zkgetconfigclient(); client.getconfig(); system.out.println(client.config.tostring()); for(int i = 0;i<100;i++){ system.out.println(client.config.tostring()); try { thread.sleep(1000); } catch (interruptedexception e) { // todo auto-generated catch block e.printstacktrace(); } } } }
上一篇: python对文件的压缩解压
下一篇: Linux for Python教程01