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实现不同的方法。
分享到:
相关推荐
- `IZkDataListener`和`IZkChildListener`:这两个接口定义了数据变更和子节点变更的监听器,用于实现事件驱动的编程模型。 - `ZkConfig`:这个类用于配置ZkClient的行为,如设置连接超时时间、会话超时时间等。 - `...
Zookeeper 还提供了一种称为 Watcher 的机制,允许客户端设置监听器在特定节点发生变化时接收通知,实现事件驱动的通信。 ### Zookeeper 实现分布式锁的原理 分布式锁是解决分布式系统中并发控制的关键组件。...
Netty是Java领域的一个开源、异步事件驱动的网络应用框架,用于快速开发可维护的高性能协议服务器和客户端。UDT是一种高速的数据传输协议,它基于UDP协议,但提供了TCP般的可靠性和连接性。 【描述】"zkclient.zip...
8. **Netty**:`netty-*`.jar,一个高性能、异步事件驱动的网络应用框架,Kafka用其处理网络通信。 9. **其他依赖**:如`lz4.jar`, `zkclient.jar`等,提供了额外的功能支持,如Zookeeper客户端库。 正确配置和...
Seata的高可用模式是通过TC使用db模式共享全局事务会话信息,使用非file的seata支持的第三方注册中心和配置中心来共享全局配置的方式来实现的。 Seata支持的第三方注册中心有nacos 、eureka、redis、zk、consul、...