简介

Java在单机环境实现了BlockQueue阻塞队列,与之类似的curator实现了分布式场景下的阻塞队列,SimpleDistributedQueue

官方文档:http://curator.apache.org/curator-recipes/simple-distributed-queue.html

javaDoc:http://curator.apache.org/apidocs/org/apache/curator/framework/recipes/queue/SimpleDistributedQueue.html

注意:zookeeper虽然可以实现队列,但是官方并不推荐使用zookeeper来做队列,主要原因在于zookeeper的空间大小设计的比较小,且对于大量数据的处理性能比较低,所以比较适合用户处理一些元数据以及应用协调,对于大量数据的建议使用其它分布式队列,比如redisson之类的,或者采用共享存储来实现。

代码示例

import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.recipes.queue.SimpleDistributedQueue;
import org.apache.curator.retry.ExponentialBackoffRetry; public class SimpleQueueDemo {
private static CuratorFramework client = CuratorFrameworkFactory.newClient("localhost:2181", new ExponentialBackoffRetry(3000, 2));
private static String path = "/queue/path001";
public static void main(String[] args) throws InterruptedException {
client.start();
System.out.println("started");
SimpleDistributedQueue queue = new SimpleDistributedQueue(client, path);
new Thread(() -> {
try {
System.out.println("sleeping");
Thread.sleep(3000);
System.out.println("sleep end");
new SimpleDistributedQueue(client, path).offer("lay".getBytes("utf-8"));
System.out.println("offered");
} catch (Exception e) {
System.out.println("exception");
e.printStackTrace();
}
}).start();
System.out.println("polling");
String data = null;
try {
data = new String(queue.take());
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("data=" + data);
client.close();
}
}

输出结果

started
polling
sleeping
sleep end
offered
data=lay

主线程会阻塞直到offer了数据

最新文章

  1. 【那些年关于java多态应用】
  2. 并查集(union-find)算法
  3. [Eigen] Issues when using Eigen
  4. 第10章 同步设备I/O和异步设备I/O(1)_常见设备及CreateFile函数
  5. c# 中使用memcached
  6. MVC4中的Display Mode简介
  7. lisp 题目
  8. 20145236 《Java程序设计》第八周学习总结
  9. GridView 鼠标经过时变色两种方法
  10. 【Django】Django命令(Manager.py)
  11. Django创建模板、URL模式、创建视图函数
  12. C++每次读取一行字符串输入(学习笔记) (转)
  13. day17.初识递归函数
  14. springcloud第二步:发布服务提供者
  15. python3+requests库框架设计02-封装日志类
  16. React 入门学习笔记整理(三)—— 组件
  17. 七牛图片存储api
  18. Linux 更改时区
  19. CF960G Bandit Blues 分治+NTT(第一类斯特林数)
  20. net 总数据中取随机几条数据

热门文章

  1. Python(模块&包)
  2. 如何实现三个div都自适应(滴滴面试题)
  3. JSP入门之自定义标签
  4. jpetStore 学习总结(2)
  5. P3348 [ZJOI2016]大森林(Link-cut-tree)
  6. 【总结】sqli-labs Less(1-35) 小结
  7. DA14580_583_DK_II开发板入门笔记
  8. RHCE 共享文件系统
  9. 【文档】四、Mysql Binlog事件含义详解
  10. Java网络编程(二)关于Socket的一些个人想法