dubbo-php-framework的服务注册zookeeper过程解析(二)

版权声明:转载请注明来源 https://blog.csdn.net/u013702678/article/details/82751456

我们接着dubbo-php-framework的服务注册zookeeper过程解析(一)继续分析剩下的接口。

//创建zk service,这里的zk service也是封装过的,不是原生zk的service,我们后续分析。
protected function createZookeeperService()
	{
		$ret = false;
		if(isset($this->config['fsof_setting']['zk_url_list']))//zk地址信息,按之前配置文件的解析,这里配置的是zk地址信息,类似http://127.0.0.1:2181
		{
			try
			{
				$zkUrlList = $this->config['fsof_setting']['zk_url_list'];
				$zkUrlArr = explode(',', $this->config['fsof_setting']['zk_url_list']);
				$registryUrl = array();
				foreach ($zkUrlArr as $zkUrl)//正式环境会配置多个zk,防止单点,这里解析zk地址信息,生成FSOFUrl对象形式的registryUrl。
				{
					$url = new FSOFUrl($zkUrl);
					$registryUrl[] = $url;
				}

				//创建与zookeeper连接用来上报和注销service信息
				$this->zkService = RegistryServiceFactory::getRegistry($registryUrl);
				//动态通过回调进行注册
				$this->zkService->registerCallFunc(array($this,'watcherCallFunc'));
				//连接zookeeper
				$ret = $this->zkService->connectZk($this->ephemeral);
				if($ret == false)
				{
					//重新连接一次
					$ret = $this->zkService->connectZk($this->ephemeral);
				}
				if($ret == false)
				{
                    $this->logger->error('connect zookeeper failed|app:' . $this->appName . '|zkurl:' . $zkUrlList);
				}
			}
			catch (\Exception $e)
			{
                $this->logger->error('connect zookeeper failed|app:'.$e->getMessage(),$e);
			}
		}
		return $ret;
	}
//设置zk日志信息,注册相关的日志和业务日志是分开的,这里设置zk的日志路径和日志级别等,而这些参数也是在全局的fsof.ini文件中配置,这里也是读取配置文件的属性进行设置。
protected function setZkLog()
	{
		//设置zookeeper日志
		$zkLog_level = isset($this->config['fsof_setting']['zklog_level'])?$this->config['fsof_setting']['zklog_level']:self::ZOOKEEPER_LOG_NO;
		if ($zkLog_level > self::ZOOKEEPER_LOG_NO)
		{
			//开启zookeeper日志输出开关
			if ($zkLog_level > self::ZOOKEEPER_LOG_DEBUG)
			{
				$zkLog_level = self::ZOOKEEPER_LOG_DEBUG;
			}

			//设置zookeeper的日志文件及日志级别(1.error; 2.warn; 3.info; 4.debug)
            if(isset($this->config['fsof_setting']['zklog_path']) && !empty($this->config['fsof_setting']['zklog_path'])){
                $this->zkService->setLogFile($this->config['fsof_setting']['zklog_path'], $zkLog_level);
            }else{
                $this->zkService->setLogFile("/var/fsof/provider/zookeeper.log", $zkLog_level);
            }
		}
	}
protected function registerServiceToZk()
	{
		$ret = false;
		
		if(!empty($this->fsofUrlList))//服务对外dubbo协议地址不为空
		{
			foreach($this->fsofUrlList as $fsofUrl)//存在多个dubbo协议地址
			{
				try
				{
                    //注册zk
					$ret = $this->zkService->register($fsofUrl);
				}
				catch(\Exception $e)
				{
					$ret = false;
					$errMsg = $e->getMessage();
                    $this->logger->error('register|app:'.$this->appName.'|url:'.$fsofUrl->getOriginUrl().'|path:'.$fsofUrl->getZookeeperPath().'|errMsg:'.$errMsg);
				}
			}
		}
		
		return $ret;
	}
//释放zk对象
protected function inventZkService()
{
    unset($this->zkService);
}

猜你喜欢

转载自blog.csdn.net/u013702678/article/details/82751456
今日推荐