`
liudunxu2
  • 浏览: 33344 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
文章分类
社区版块
存档分类
最新评论

zkclient的事件驱动实现

 
阅读更多

zkclient通过BlockingQueue实现多线程的事件驱动,当zkClient对象构造时,调用connect方法启动eventthread线程,eventthread线程的run实现如下:

 @Override
    public void run() {
        LOG.info("Starting ZkClient event thread.");
        try {
            while (!isInterrupted()) {
                ZkEvent zkEvent = _events.take();
                int eventId = _eventId.incrementAndGet();
                LOG.debug("Delivering event #" + eventId + " " + zkEvent);
                try {
                    zkEvent.run();
                } catch (InterruptedException e) {
                    interrupt();
                } catch (ZkInterruptedException e) {
                    interrupt();
                } catch (Throwable e) {
                    LOG.error("Error handling event " + zkEvent, e);
                }
                LOG.debug("Delivering event #" + eventId + " done");
            }
        } catch (InterruptedException e) {
            LOG.info("Terminate ZkClient event thread.");
        }
    }

由zkClient对象调用thread的send方法向blockingqueue中写入一个ZkEvent,zkEvent本身是一个抽象类,zkClient通过实现其中的run方法,实现不同的业务功能,zkClient对象内部保存一个Map<String, Set<IZkChildListener>> _childListener作为观察者模式的listener。ZkEvent内部实现主要调用listener实现不同的方法。
分享到:
评论

相关推荐

    zkclient-2.1.1.rar

    - `IZkDataListener`和`IZkChildListener`:这两个接口定义了数据变更和子节点变更的监听器,用于实现事件驱动的编程模型。 - `ZkConfig`:这个类用于配置ZkClient的行为,如设置连接超时时间、会话超时时间等。 - `...

    通过zookeeper实现分布式锁

    Zookeeper 还提供了一种称为 Watcher 的机制,允许客户端设置监听器在特定节点发生变化时接收通知,实现事件驱动的通信。 ### Zookeeper 实现分布式锁的原理 分布式锁是解决分布式系统中并发控制的关键组件。...

    netty-transport-udt-4.0.10.Final.zip

    Netty是Java领域的一个开源、异步事件驱动的网络应用框架,用于快速开发可维护的高性能协议服务器和客户端。UDT是一种高速的数据传输协议,它基于UDP协议,但提供了TCP般的可靠性和连接性。 【描述】"zkclient.zip...

    kafka_lib.rar

    8. **Netty**:`netty-*`.jar,一个高性能、异步事件驱动的网络应用框架,Kafka用其处理网络通信。 9. **其他依赖**:如`lz4.jar`, `zkclient.jar`等,提供了额外的功能支持,如Zookeeper客户端库。 正确配置和...

    seata1.3.0.zip

    Seata的高可用模式是通过TC使用db模式共享全局事务会话信息,使用非file的seata支持的第三方注册中心和配置中心来共享全局配置的方式来实现的。 Seata支持的第三方注册中心有nacos 、eureka、redis、zk、consul、...

Global site tag (gtag.js) - Google Analytics