1 ZooKeeper 管理连接
请不要自己试着去管理ZooKeeper客户端的连接,Zookeeper 客户端库会监控与服务之间的连接,不仅会告知连接发生问题,还会主动尝试重新建立通信。不要关闭会话后在启动一个新的会话,这样会增加系统负载,导致更长时间的中断。
2 回调函数处理
因为只有一个单独的线程处理所有回调调用,如果回调函数阻塞,所有后续回调调用都会被阻塞,也就是说,一般不要在回调函数中集中操作或者阻塞操作,有时,在回调函数中调用同步方法是合法的,但一般还是避免这样做,以便后续回调调用可以快速被处理。
3 顺序和ConnectionLossException异常
ZooKeeper会严格维护执行顺序,并提供强有力的有序保障,然而,在多线程下还是需要小心面对顺序问题,多线程下,当回调函数中包括重试逻辑的代码时,一些常见的场景都可能导致错误发生,当遇到ConnectionLossException异常而补发一个请求时,新建立的请求可能排序在其他线程中的请求之后,而实际上其他线程中的请求应该在原来请求之后。
网友评论