老王讲自制RPC框架.(三.ZOOKEEPER)
(#)定义
Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群
管理、分布式应用配置项的管理
(#)使用
配置zk客户端我就不多说了,这个网上一找一堆,我主要说一下就是,自己玩玩的话,没必要搭建一个集群,用一台基本问题不大,在此假设集群已经搭建完成了
需要引入zk client的jar包
(#)code
private Logger logger = LoggerFactory.getLogger(ServiceRepository.class);
@Value("${session.timeout}")
private int SESSION_TIMEOUT;
@Value("${registry.address}")
private String CONNECT_STRING;
@Value("${repository.path}")
private String RPC_PATH;
private ZooKeeper zooKeeper = null;
private CountDownLatch latch = new CountDownLatch(1); private void createConnect() {
releaseConnection();
try {
zooKeeper = new ZooKeeper(CONNECT_STRING, SESSION_TIMEOUT,
new Watcher() {
public void process(WatchedEvent event) {
logger.info("receive message :{}" + event.getState());
latch.countDown();
}
});
latch.await();
} catch (IOException e) {
logger.error("create异常信息:{}", e);
} catch (InterruptedException e) {
logger.error("create异常信息:{}", e);
}
;
} private void releaseConnection() {
if (zooKeeper != null) {
try {
zooKeeper.close();
} catch (InterruptedException e) {
logger.error("release异常信息:{}", e);
}
}
} private boolean createPath(String path, String data) {
try {
zooKeeper.create(path, data.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
} catch (KeeperException e) {
logger.error("create异常信息:{}", e);
} catch (InterruptedException e) {
logger.error("create异常信息:{}", e);
}
return true;
} public String readData(String path) {
try {
return new String(zooKeeper.getData(path, false, null));
} catch (KeeperException e) {
logger.error("read异常信息:{}", e);
return "";
} catch (InterruptedException e) {
logger.error("read异常信息:{}", e);
return "";
}
} public boolean writeData(String path, String data) {
try {
zooKeeper.setData(path, data.getBytes(), -1);
} catch (KeeperException e) {
logger.error("write异常信息:{}", e);
} catch (InterruptedException e) {
logger.error("write异常信息:{}", e);
}
return false;
} public void deleteNode(String path) {
try {
zooKeeper.delete(path, -1);
} catch (KeeperException e) {
logger.error("delete异常信息:{}", e);
} catch (InterruptedException e) {
logger.error("delete异常信息:{}", e);
}
}
}
老王讲自制RPC框架.(三.ZOOKEEPER)的更多相关文章
- 老王讲自制RPC框架.(一.前言与技术选型)
(#)背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构 当网站流量很小时,只 ...
- 老王讲自制RPC框架.(四.序列化与反序列化)
#(序列化) 在实际的框架中,真正影响效率的就是数据的传输方式,以及传输的准备,或者说是tcp与http,序列化.当然要想提高整个框架的效率,需要采用一种高效的序列化 框架比如流行的protostuf ...
- 老王讲自制RPC框架.(二.动态代理)
(#简介) 什么是动态代理?动态代理是实现阶段不关心代理是谁,而在运行阶段才指定代理对象是哪一个,动态代理在做框架方面使用非常 广泛,比如spring的aop,其核心就是采用动态代理机制,下面让我们来 ...
- 手写RPC框架(netty+zookeeper)
RPC是什么?远程过程调用,过程就是业务处理.计算任务,像调用本地方法一样调用远程的过程. RMI和RPC的区别是什么?RMI是远程方法调用,是oop领域中RPC的一种实现,我们熟悉的restfull ...
- RPC 框架
RPC 谁能用通俗的语言解释一下什么是 RPC 框架? - 远程过程调用协议RPC(Remote Procedure Call Protocol) RPC就是要像调用本地的函数一样去调远程函数. 推荐 ...
- RPC框架-通俗易懂的解释
早期单机时代,一台电脑上运行多个进程,大家各干各的,老死不相往来.假如A进程需要一个画图的功能,B进程也需要一个画图的功能,程序员就必须为两个进程都写一个画图的功能.这不是整人么?于是就出现了IPC( ...
- 高并发架构系列:如何从0到1设计一个类Dubbo的RPC框架
在过去持续分享的几十期阿里Java面试题中,几乎每次都会问到Dubbo相关问题,比如:“如何从0到1设计一个Dubbo的RPC框架”,这个问题主要考察以下几个方面: 你对RPC框架的底层原理掌握程度. ...
- 如何从0到1设计一个类Dubbo的RPC框架
之前分享了如何从0到1设计一个MQ消息队列,今天谈谈"如何从0到1设计一个Dubbo的RPC框架",重点考验: 你对RPC框架的底层原理掌握程度. 以及考验你的整体RPC框架系统设 ...
- python之路:变量与变量基本操作(老王版)
python开发之路:变量与变量基本操作 你是一个师范大学的优秀毕业生,现在在某某小学工作. 你想:判作业真的很累,隔壁老王现在天天玩<蓝月传奇>,银行里存满了钱.唉,每节课1个小时,每个 ...
随机推荐
- linux更改 DNS 的一般方式
一.第一种方法(常规方法) 在 Linux (笔者用fedora) 下当使用 NetworkManager时,更改 DNS 的一般方式: 修改 /etc/resolv.conf 文件, 添加 &quo ...
- maven官方库中没有oracle jdbc驱动的问题解决
1.找到可用的oracle jdbs驱动jar包文件,放置到指定目录(可根据实际自定义) D:\jdbc\ojdbc14.jar 2.安装好maven,主要是配置好环境变量 MAVEN_HOME='指 ...
- failed to lazily initialize a collection of role:XXX, no sessi
系统 框架 springMVC+hibernate 这种情况 由于 hibernate 的 懒汉机制,和 Spring 事务机制(不确定)造成的 由于 spring 配置的时候,在service 层 ...
- java compiler level does not match the version of the installed java project facet
Java compiler level does not match the version of the installed java project facet错误的解决 因工作的关系,Eclip ...
- 未能加载文件或程序集“projectname, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。系统找不到指定的文件。
- 3.多线程NSOperation
1.NSOperation的基本操作 使用NSOperation的两个子类,NSInvocationOperation 和 NSBlockOperation 创建操作,然后将操作添加到队列中去执行 / ...
- 8139too.c网卡驱动简单分析
从事linux C开发工作以来,工作内容主要是在应用层,对nginx和unbound等软件有些了解,也常对这2个软件进行二次开发. 对网络这块一直比较有兴趣.也很好奇网卡到底是怎么接受到报文的,以及报 ...
- http 协议集合,超级简单
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Web; ...
- YbSoftwareFactory 代码生成插件【二十四】:MVC中实现动态自定义路由
上一篇介绍了 公文流转系统 的实现,本篇介绍下MVC下动态自定义路由的实现. 在典型的CMS系统中,通常需要为某个栏目指定个友链地址,通过指定友链地址,该栏目的地址更人性化.方便记忆,也有利用于搜索引 ...
- iOS开发随笔
突然看到一个搞11年IT的前辈 他的简历给人焕然一新的感觉 IOS:深入理解object-c语言 内存管理(ARC,MRC, 写回传),GCD,RunLoop,RunTime,,Block,Deleg ...