moponphp / mpc
mopon泰久php项目组 泰久云接入组件
1.1.5
2017-03-22 08:32 UTC
Requires
- php: >=5.4.0
- moponphp/controller: *
- moponphp/model: *
- moponphp/thrift: >=1.1.4
README
version=1.1.6
是什么? mpc (MoPonCloud) 泰久云 php接入组件
完成了 etcd接入(读取数据,写入数据)
怎么用?
配置文件中添加 组件
//client端
'mpc' => [
'class' => 'moponphp\mpc\Client',
'etcdUrl'=>'192.168.27.63:2379', //etcd服务器地址 注意这里没有http
//需要加载的所有服务名称的集合
'services'=>[
'base'=>'/service/thrift/base',
"user" => "/cloud/platform/service3",
'mc'=>'/service/thrift/mc',
],
'etcdConfig'=>[
'group'=>1, 指定特定组的机器 适用于开发调试 服务器配置中也需要有相同配置
//更多参数详见 \moponphp\mpc\etcd\Connection 类的属性定义
],
'thriftConfig'=>[
'isPersist'=>false, 是否启用长链接
//更多参数详见 \moponphp\thrift\Connection 类的属性定义
],
],
注: 为了实现鉴权还需要设置 app的id为 注册菜单的前缀名 (去掉前后的反斜线)
mpc配置中除class属性外其他皆可选
//服务器端 (这些参数可以直接写入启动脚本 无需写入配置文件)
'mpcs' => [
'etcdUrl'=>'192.168.27.63:2379',
////配置服务器信息
//管控平台信息 已获取seviceNameing 如果使用客户端并且给出了seviceNaming 则三项可以不配置
'projectName'=>'/scec/saas/php',
'workName'=>'/act-adminApi',
'versionName'=>"1.0.0",
//或者直接给出seviceNaming 建议客户端直接给出
'seviceNaming'=>"/service/thrift/base", //需要加载的所有服务名称的集合
'hostname'=>"", //可选默认本机
"port"=>"", //可选默认 9999
]
//服务器搭建以及启动过程
新建server项目用于存放 php对外的服务 (操作方法copy admin,并修改相关配置,主要就是名称空间和commpon.config.bootstrap)
copy server/web/index.php 到 server/web/start.php 删除最后一句$appaction->run(); 增加服务器启动命令详见下面的 使用方法 服务器部分 (这个文件用于服务启动 nohup php start.php > /dev/null & )
服务器api 参考adminapi.ApiController
//公共类封装: (封装的类对租户信息,访问授权,传入参数等做了统一封装处理)
server/controller/Controller 继承 \moponphp\mpc\ServerController
adminapi/controller/Controller 继承 \moponphp\mpc\ClientController
common/model/Model 继承 \moponphp\mpc\Model (封装了多商户表的实现)
使用方法:
客户端:
控制器或者model中调用代码如下:
Yii::$app->mpc->base('/app/price/v1/auditRefuseCinemaPolicy')->call([
'cinemaCode'=>'36050601',
]);
或: Yii::$app->mpc->base(['/app/price/v1/auditRefuseCinemaPolicy','cinemaCode'=>'36050601']);
或: $this->mpc->base(['/app/price/v1/auditRefuseCinemaPolicy','cinemaCode'=>'36050601'],2);
注: base 来自于配置文件中的services数组的key (注意mpc.clietn类中封装了许多默认key)
/app/price/v1/auditRefuseCinemaPolicy 是文档中的uri 注意斜线不要丢失或多加 php组默认的url封装规则为 原始路由加版本 比如: r=act/list 最终文档中提现的url="/act/list/v1" (v1可选,这个参数会在服务器中体现在$_ENV['version'] 中
['cinemaCode'=>'36050601',] 是接口的传递参数
函数可以传入第二个参数 用来做异常处理的 (false为不抛出 1为只抛出网络异常 2 为抛出网络异常和逻辑异常)
服务器端:
Yii::$app->mpcs->start();
或者
$server = new \moponphp\mpc\Server([
'etcdUrl'=>'192.168.27.63:2379',
'serviceNaming'=>"/service/thrift/base",
]);
$server->start();
注: 服务器端可以访问 $_ENV['version'] 或 Yii::$app->controller->version 来获取客户端传递的action版本信息 来做相应的版本处理
可以通过 $GLOBALS['biz_code'] 或者$this->biz_code来获取租户信息
init/mpc.sh init && 根/mpc.sh start
参考
1 管控平台配置中心: http://192.168.27.63:8088/center.html 也就是配置文件中的管控平台部分 [这个部分其实可有可无)
2 etcd服务器 : http://192.168.27.63:2379/v2/keys/service/thrift/base (获取服务器信息,定期设置维护服务器信息)
3 thrift协议通信 moponphp/thrift/README.MD 真正实现数据交互
4 http://www.tuicool.com/articles/NvEZV3F etcd集群管理简介
/v2/members 查看成员
/v2/stats/self 查看集群状态
问题:
1服务器信息注册到etcd 配置服务器负载信息暂未实现 位于 etcd.ServiceAddressInfo.getload 暂未实现
2多商户表创建
3 php启动的服务器不稳定 还有内存释放和进程守护问题 暂时先不考虑
相关的全局变量
$_ENV['version']
$GLOBALS['biz_code']
更新日志:
2017-03-30 ClientController 增加 uriPrefix 用与同一个项目不同的控制器有不同的路由前缀的情况