zoukankan      html  css  js  c++  java
  • 七、curator recipes之阻塞队列SimpleDistributedQueue

    简介

    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了数据

  • 相关阅读:
    2017面向对象程序设计寒假作业2!
    寒假学习计划
    2017面向对象程序设计寒假作业1!
    bzoj3583 杰杰的女性朋友
    poj1185 [NOI2001炮兵阵地]
    bzoj1009 [HNOI2008]GT考试
    EXKMP
    bzoj1355 [Baltic2009]Radio Transmission
    poj1275 Cashier Employment
    bzoj3809 Gty的二逼妹子序列
  • 原文地址:https://www.cnblogs.com/lay2017/p/10264503.html
Copyright © 2011-2022 走看看