class ZookeeperRegistryFactory extends AbstractRegistryFactory {
    @Override
    protected Registry createRegistry(URL registryUrl) {<FILL_FUNCTION_BODY>}

    protected ZkClient createInnerZkClient(String zkServers, int sessionTimeout, int connectionTimeout) {
        return new ZkClient(zkServers, sessionTimeout, connectionTimeout);
    }
}

        try {
            int timeout = registryUrl.getIntParameter(URLParamType.connectTimeout.getName(), URLParamType.connectTimeout.getIntValue());
            int sessionTimeout = registryUrl.getIntParameter(URLParamType.registrySessionTimeout.getName(), URLParamType.registrySessionTimeout.getIntValue());
            ZkClient zkClient = createInnerZkClient(registryUrl.getParameter("address"), sessionTimeout, timeout);
            return new ZookeeperRegistry(registryUrl, zkClient);
        } catch (ZkException e) {
            LoggerUtil.error("[ZookeeperRegistry] fail to connect zookeeper, cause: " + e.getMessage());
            throw e;
        }
    
<methods>public non-sealed void <init>() ,public com.weibo.api.motan.registry.Registry getRegistry(com.weibo.api.motan.rpc.URL) <variables>private static final java.util.concurrent.locks.ReentrantLock lock,private static final ConcurrentHashMap<java.lang.String,com.weibo.api.motan.registry.Registry> registries