dubbo-php-framework控制台provider_admin启动服务过程解析(2)

接着dubbo-php-framework控制台provider_admin启动服务过程解析(1),我们遗留了进程实际的运行过程,对应到代码如下:

//启动脚本路径,整个展开为dubbo-php-framework/provider/shell/StartUp.php
	$startUpPath = dirname(FSOF_ROOT_PATH)."/provider/shell/StartUp.php";
	if(!file_exists($startUpPath))//判断文件是否存在
	{
        echo "{$cmd} server {$name} \033[31;40m [FAIL] \033[0m; no find:{$startUpPath}".PHP_EOL;
		return false;
	}

    //初始化PHP可执行文件路径,类似/usr/local/bin等
	initByFSOFConfig();;
    //调用swoole的swoole_process创建子进程,用于启动任务,这里的子进程充当了Provider的master进程的角色
	$process = new \swoole_process(function(\swoole_process $worker) use($startUpPath, $cmd, $name)
	{
        //设置进程运行内容,也就是PHP可执行路径,调用startUpPath路径的脚本,传入参数为name和cmd
        //这里的运行紧接着在Provider启动过程解析(2)中分析
		$worker->exec(PHP_BIN_PATH, array($startUpPath, $name, $cmd));
	}, false);
	$process->start();//启动进程


也就是dubbo-php-framework/provider/shell/StartUp.php的内容,从上一篇分析可以知道,swoole_process启动进程的内容也就是php运行dubbo-php-framework/provider/shell/StartUp.php的过程,现在开始分析StartUp.php内容。

<?php
namespace com\fenqile\fsof\provider\shell;

use com\fenqile\fsof\common\config\FSOFConfigManager;
use com\fenqile\fsof\provider\core\server\TcpServer;

define("BIN_DIR", __DIR__);
define('MYROOT',BIN_DIR."/../..");

require_once MYROOT . '/vendor/autoload.php';
require_once MYROOT . '/vendor/apache/log4php/src/main/php/Logger.php';

// 定义provider shell目录
define('FSOF_PROVIDER_SHELL_PATH', __DIR__);
// 定义provider 根目录
define('FSOF_PROVIDER_ROOT_PATH', dirname(FSOF_PROVIDER_SHELL_PATH));
//定义FSOF框架根目录
define('FSOF_FRAMEWORK_ROOT_PATH', dirname(FSOF_PROVIDER_ROOT_PATH));

//提取cmd和 name
$name = $argv[1];
$cmd = $argv[2];
if (empty($cmd) || empty($name))
{
    echo("please input cmd and server name!");
    exit(1);
}

//log系统初始化需要用到appName,暂时以常量方式处理
if(!defined('FSOF_PROVIDER_APP_NAME')) define('FSOF_PROVIDER_APP_NAME', $name);
//载入Provider 框架代码
require_once FSOF_PROVIDER_ROOT_PATH.DIRECTORY_SEPARATOR.'FSOFProvider.php';

//读取conf目录下的$name.deploy文件,然后启动对应的server
if (($cmd != 'stop' && $cmd != 'reload' ) && !FSOFConfigManager::isProviderAppDeploy($name))
{
    echo "{$name} can not find deploy file or bootstrap.php".PHP_EOL;
	exit(1);
}

$config = FSOFConfigManager::getProviderAppDeploy($name);
if(isset($config['server']['log_cfg_file_path']) && !empty($config['server']['log_cfg_file_path']))
{
    \Logger::configure($config['server']['log_cfg_file_path']);
    date_default_timezone_set('PRC');
}

\Logger::getLogger(__CLASS__)->info("input {$cmd} {$name}");
//定义Tcp类型的server
$server = new TcpServer($name);
//加载app root目录下的bootstrap.php和provider/$name.provider文件
$server->setRequire(FSOFConfigManager::getProviderAppRoot($name));

//app/conf目录下的$name.deploy文件
$server->loadConfig($config);
//全局fsof.ini文件
$server->loadConfig(FSOFConfigManager::getFSOFIni());

//设置swoole扩展日志文件
$server->setSwooleLogFile($cmd);

//provider启动时初始化consumer
$server->initConsumer();

//初始化server资源
$server->initRunTime('/var/fsof/provider');

//启动
$server->run($cmd);

这里可以看出最终的启动是通过调用TcpServer的run函数来完成,关于TcpServer的实现在后续篇章分析,接下来几篇我们把provider_admin里面的其他动作实现也做简单介绍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在将Nacos与Dubbo-Admin集成之前,需要先确保已经完成了以下步骤: 1. 安装和启动Nacos服务; 2. 部署和启动Dubbo-Admin服务; 3. 在Dubbo-Admin服务中配置Dubbo的注册中心为Nacos。 下面是详细的搭建步骤: 1. 在Nacos中创建一个命名空间,并且在该命名空间下创建一个服务。例如,命名空间为dubbo服务名称为dubbo-demo。 2. 在Dubbo-Admin服务中打开dubbo.properties文件,在文件中添加以下配置: ``` dubbo.registry.address=nacos://<Nacos服务器地址>:<Nacos服务器端口> dubbo.metadata-report.address=nacos://<Nacos服务器地址>:<Nacos服务器端口> ``` 其中,<Nacos服务器地址>和<Nacos服务器端口>分别为Nacos服务器的地址和端口号。 3. 在Dubbo-Admin服务启动Dubbo-Admin应用程序。在浏览器中打开Dubbo-Admin的管理界面,并且在左侧的导航栏中选择服务管理。 4. 在服务管理页面中,选择dubbo-demo服务,并且在服务详情页面中,单击“编辑”按钮。在编辑页面中,配置服务的元数据,然后单击“保存”按钮。 5. 在服务详情页面中,单击“订阅”按钮,以便Dubbo-Admin能够自动发现和管理该服务。 6. 在Dubbo-Admin的管理界面中,选择服务监控。在服务监控页面中,可以查看dubbo-demo服务的状态和性能指标。 到此为止,Nacos和Dubbo-Admin的集成就已经完成了。通过Dubbo-Admin的管理界面,可以方便地对Dubbo服务进行监控、管理和配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值