Zookeeper: 数据发布订阅
来源:互联网 发布:nat 穿透 java 编辑:程序博客网 时间:2024/05/29 18:26
Zookeeper几大典型应用场景
1.数据发布订阅
2.负载均衡
3.命令服务
4.分布式协调/通知
5.Master选举
6.分布式锁
7.分布式队列
我想每个应用场景均用实例来做一遍加深自己的影响。
本次就写实例:数据发布订阅 .
需求:将一个jdbc的配置放在zookeeper集群下,通过发布订阅,来动态获取jdbc配置。
JDBC配置类
** * jdbc 配置的信息 */public class JdbcConfig { private String ip; private int port; private String username; private String password; private int maxConnect; public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getMaxConnect() { return maxConnect; } public void setMaxConnect(int maxConnect) { this.maxConnect = maxConnect; } @Override public String toString() { return "JdbcConfig{" + "ip='" + ip + '\'' + ", port=" + port + ", username='" + username + '\'' + ", password='" + password + '\'' + ", maxConnect=" + maxConnect + '}'; }
序列化类.
public class MyZkSerializer implements ZkSerializer{ public byte[] serialize(Object data) throws ZkMarshallingError { try { return String.valueOf(data).getBytes("UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return null; } public Object deserialize(byte[] bytes) throws ZkMarshallingError { try { return new String(bytes, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return null; }
发布订阅类.
public class ZkSubScribe { /** * 节点名称,配置jdbc */ private final String JDBC_CONFIG = "/jdbc_config" ; private final int CONNECT_TIMEOUT = 3000; private final int SESSION_TIMEOUT = 3000; private final String SERVERS = "172.16.168.200:2181,172.16.168.200:2182,172.16.168.200:2183"; ZkClient zk; @Before public void init(){ zk = new ZkClient(SERVERS,SESSION_TIMEOUT,CONNECT_TIMEOUT,new MyZkSerializer()); //判断节点是否存在 不存在就创建 boolean isExist = zk.exists(JDBC_CONFIG); if(!isExist){ JdbcConfig config = new JdbcConfig(); config.setIp("172.16.168.201"); config.setPort(3306); config.setPassword("admin"); config.setPassword("admin"); config.setMaxConnect(100); zk.createPersistent(JDBC_CONFIG,config); } } @Test public void subscribe(){ System.out.println(zk.readData(JDBC_CONFIG)); zk.subscribeDataChanges(JDBC_CONFIG, new IZkDataListener() { public void handleDataChange(String dataPath, Object data) throws Exception { System.out.println("the date change"); System.out.println("the path is "+dataPath); System.out.println("the new data is "+data); //这里可以进行后续的jdbc配置管理操作 } public void handleDataDeleted(String dataPath) throws Exception { } }); try { System.in.read(); } catch (IOException e) { e.printStackTrace(); } } @Test public void changeData(){ System.out.println("prepare to change data...."); JdbcConfig newConfig = new JdbcConfig(); newConfig.setIp("172.16.168.200"); newConfig.setPort(3306); newConfig.setUsername("root"); newConfig.setPassword("root"); newConfig.setMaxConnect(100); zk.writeData(JDBC_CONFIG,newConfig); }
效果
集中配置管理就是通过Zookeeper的发布订阅功能发来处理。当我们zookeeper管理的节点信息发生改变后,发送给订阅者。
阅读全文
0 0
- Zookeeper: 数据发布订阅
- Zookeeper 实现数据的发布和订阅
- Zookeeper实现数据的发布和订阅
- 使用ZooKeeper实现数据发布/订阅。
- Zookeeper学习(八):Zookeeper的数据发布与订阅模式
- zookeeper应用场景练习(数据发布/订阅)
- zookeeper(二) 数据发布与订阅(配置中心)
- ZooKeeper的典型应用场景之数据发布/订阅。
- zookeeper订阅与发布实现
- ZooKeeper 学习 (六) ZooKeeper实现数据发布订阅(即配置中心)
- 数据发布与订阅
- sql2005数据同步技术(数据订阅,发布)
- 利用zookeeper的发布/订阅模式实现配置动态变更
- 利用zookeeper的发布/订阅模式实现配置动态变更
- 用zookeeper实现简单的发布订阅功能
- zookeeper应用场景-消息的订阅和发布
- Sql2008 复制 发布 订阅 (数据同步)
- js发布订阅实现双向数据绑定
- 代码整洁之道
- Spring @Component, @Repository, @Service and @Controller Annotations
- Yii2 中关于 ActiveForm 中checkboxList默认选中的问题
- 北大党委插手方正,驱赶王选
- 预编译处理#error的作用
- Zookeeper: 数据发布订阅
- 时间的积累
- UNIX编程专题-可重入函数和不可重入函数
- 定时器系列——理解setTimeout和setInterval
- 计算机网络读书笔记——物理层(2)
- 拖延症
- java并发编程实战-取消与关闭1
- 2017.07.9【NOIP提高组】模拟赛B组小结
- android 网络请求get,post实现