zookeeper应用 - FIFO 队列 分布式队列
使用ZooKeeper实现的FIFO队列,这个队列是分布式的。
package fifo;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooDefs;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat;
/**
* 使用ZooKeeper实现的FIFO队列
* @author lisg
*
*/
public class ZKFIFO {
private static final String HOSTS = "vm1";
private ZooKeeper zk = null;
private static final String PARENT_PATH = "/fifo";
private static final String SEQ_PREFIX = "seq-"; public ZKFIFO() {
try {
final CountDownLatch cdl = new CountDownLatch(1);
zk = new ZooKeeper(HOSTS, 5000, new Watcher() {
@Override
public void process(WatchedEvent event) {
if(KeeperState.SyncConnected.equals(event.getState())) {
cdl.countDown();
}
}
}); cdl.await(); //创建父节点
Stat stat = zk.exists(PARENT_PATH, false);
if(stat == null) {
zk.create(PARENT_PATH, "".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
}
} catch (Exception e) {
System.out.println("zookeeper集群连接失败!");
e.printStackTrace();
}
} /**
* 在父节点下创建顺序子节点
* @param data
*/
public void push(String data) {
if(data == null) {
data = "";
} try {
zk.create(PARENT_PATH + "/" + SEQ_PREFIX,
data.getBytes("UTF-8"),
ZooDefs.Ids.OPEN_ACL_UNSAFE,
CreateMode.PERSISTENT_SEQUENTIAL);
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 删除字第一个子节点,并返回它的值
* @return
*/
public String pop() {
try {
final List<String> children = zk.getChildren(PARENT_PATH, false);
if(children.isEmpty()) {
return null;
} Collections.sort(children); String firstChildPath = PARENT_PATH + "/" + children.get(0); final byte[] data = zk.getData(firstChildPath, false, null);
zk.delete(firstChildPath, -1); return new String(data, "UTF-8");
} catch (Exception e) {
e.printStackTrace();
} return null;
} public void close() {
try {
this.zk.close();
} catch (InterruptedException e) {
e.printStackTrace();
}
} public static void main(String[] args) {
final ZKFIFO fifo = new ZKFIFO(); /*
for(int i=0; i<10; i++) {
new Thread() {
public void run() {
fifo.push("data-" + UUID.randomUUID().toString().replace("-", ""));
};
}.start();
}
*/ System.out.println(fifo.pop()); fifo.close();
}
}
zookeeper应用 - FIFO 队列 分布式队列的更多相关文章
- 实现分布式队列ZooKeeper的实现
一.背景 有一些时候,多个团队需要共同完成一个任务,比如,A团队将Hadoop集群计算的结果交给B团队继续计算,B完成了自己任务再交给C团队继续做.这就有点像业务系统的工作流一样,一环一环地传下去,直 ...
- [转载] ZooKeeper实现分布式队列Queue
转载自http://blog.fens.me/zookeeper-queue/ 让Hadoop跑在云端系列文章,介绍了如何整合虚拟化和Hadoop,让Hadoop集群跑在VPS虚拟主机上,通过云向用户 ...
- ZooKeeper 实现分布式队列
使用场景 在传统的单进程编程中,我们使用队列来存储数据结构,用来在多线程之间共享或者传递数据.在分布式环境下,同样需要一个类似单进程的组件, 用来实现跨进程.跨主机.跨网络的数据共享和数据传递.这就 ...
- 分布式队列ZooKeeper的实现
一.背景 有一些时候,多个团队需要共同完成一个任务,比如,A团队将Hadoop集群计算的结果交给B团队继续计算,B完成了自己任务再交给C团队继续做.这就有点像业务系统的工作流一样,一环一环地传下 去, ...
- 一种基于zookeeper的分布式队列的设计与实现
package com.ysl.zkclient.queue; import com.ysl.zkclient.ZKClient; import com.ysl.zkclient.exception. ...
- ZooKeeper实现分布式队列Queue
ZooKeeper实现分布式队列Queue 让Hadoop跑在云端系列文章,介绍了如何整合虚拟化和Hadoop,让Hadoop集群跑在VPS虚拟主机上,通过云向用户提供存储和计算的服务. 现在硬件越来 ...
- 分布式队列神器 Celery
Celery 是什么? Celery 是一个由 Python 编写的简单.灵活.可靠的用来处理大量信息的分布式系统,它同时提供操作和维护分布式系统所需的工具. Celery 专注于实时任务处理,支持任 ...
- Celery ---- 分布式队列神器 ---- 入门
原文:http://python.jobbole.com/87238/ 参考:https://zhuanlan.zhihu.com/p/22304455 Celery 是什么? Celery 是一个由 ...
- 分布式队列Celery
Celery是什么? Celery 是一个由 Python 编写的简单.灵活.可靠的用来处理大量信息的分布式系统,它同时提供操作和维护分布式系统所需的工具. Celery 专注于实时任务处理,支持任务 ...
随机推荐
- zabbix 自定义 key (转)
转自:http://www.cnblogs.com/miclesvic/p/6164303.html 1.在zabbix_agent端zabbix_agentd.conf配置文件中增加自定义Key(/ ...
- Java模拟双色球彩票
package practice1; import java.util.Random; import java.util.Scanner; public class Test3 { /** * * 模 ...
- mac 系统安装VM虚拟机打开时报错,提示不是虚拟磁盘的解决方式。
最近刚买的苹果系统,不太会用,装了个虚拟机vmware fusion,好不容易把需要的软件装好,然后不知道是我操作了哪里,今天再次打开虚拟机的时候打不开了,报错提示找不到磁盘文件(虚拟磁盘-00000 ...
- Disconf 学习系列之全网最详细的最新稳定Disconf 搭建部署(基于Ubuntu14.04 / 16.04)(图文详解)
不多说直接上干货! https://www.cnblogs.com/wuxiaofeng/p/6882596.html (ubuntu16.04) https://www.cnblogs.com/he ...
- Flow类
JLS参考:https://docs.oracle.com/javase/specs/jls/se7/html/jls-16.html This pass implements dataflow an ...
- sql server数据行号
select ROW_NUMBER() over(order by createTime desc) as RowNum,NoticeContent,CreateTime from PTS_Notic ...
- window启动程控制
1.启动服务管理(RPC) 2.开启远程选项 3.开启防火墙允许
- .Net Core全球化多语言
参照:ASP.NET Core 全球化和本地化 步骤如下: 后台中的本地化. Startup.cs中注册服务并制定Resource文件的位置.注意:这里的位置不仅仅应用到Web层,如Infrastru ...
- 父页面向iframe子页面传递参数
父页面: <iframe src="video.html" width="100%" height="400" name=" ...
- org.springframework.web.context.ContextLoaderListener 解决办法
最近部署ssm项目在tomcat,tomcat启动的时候发出org.springframework.web.context.ContextLoaderListener 错误 严重: Error con ...