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

  • 相关阅读:
    Access使用记录
    html js 表单提交前检测数据
    asp.net mvc5 action多个参数
    asp.net mvc Areas 母版页动态获取数据进行渲染
    asp.net mvc 自定义全局过滤器 验证用户是否登录
    .net 报错汇总——持续更新
    数据库基础
    Python协程
    Python 线程
    Python 队列
  • 原文地址:https://www.cnblogs.com/lay2017/p/10264503.html
Copyright © 2011-2022 走看看