mingyuanyun / yii2-iaop
iAop组件
v1.1.7
2021-07-21 09:56 UTC
Requires
- php: >=7.0
- ext-json: *
- mingyuanyun/goaop-framework: >=1.0.5,<2.0
- mingyuanyun/parser-reflection: ^1.0
Requires (Dev)
- yiisoft/yii2: ~2.0.0
This package is not auto-updated.
Last update: 2024-10-24 01:52:34 UTC
README
iAop 针对多租户个性化场景,提供智能加载、智能路由、智能AOP等整套产品个性化定制解决方案,实现了产品代码与租户个性化定制代码分仓库管理、互不影响、并行开发的良好开发模式(防止租户个性化代码污染主产品代码)。
一、安装
标准框架默认内置了 iAop 组件。
如果是其他项目要安装,执行以下命令即可安装最新发布版本:
composer require mingyuanyun/yii2-iaop
安装指定发布版本:
composer require mingyuanyun/yii2-iaop:版本号
更新版本
修改composer.json
文件,调整版本号,再执行:
composer update mingyuanyun/yii2-iaop
注意:每次执行完 comopser 命令后需要把此组件包下的 .git 文件夹删除再进行代码提交,否则会提交不成功,可以加这段脚本。
二、配置
在配置文件bootstrap
中添加iAop组件 (注意大小写):
'bootstrap' => ['iAop']
在配置文件components
中添加iAop组件:
'components' => [
'iAop' => [
'class' => 'iAop\Component',
'tenantIdentifierReaderConfig' => ['query' => 'o,tenant_code', 'header' => 'tenant-code', 'cookie' => 'o'],
// 'tenantIdentifierReaderClass' => '\services\aop\TenantIdentifierReader', //与 tenantIdentifierReaderConfig 配置二选一
'aopHeaderFlag' => 'X-Aop',
'autoloadTenantCode' => false,
'aopDebug' => false,
'isAopEnabled' => false,
'greyTenantConfig' => [
// 'configProviderClass' => '\services\aop\GreyTenantConfigProvider',
'methodConfigKey' => 'grey_tenant_method_config',
'paramConfigKey' => 'grey_tenant_param_config'
],
'aspectConfig' => [
'appDir' => dirname(dirname(__DIR__)),
'cacheDir' => dirname(dirname(__DIR__)) . '/runtime/aspect',
'includePaths' => [
dirname(dirname(__DIR__)) . '/backend/controllers',
dirname(dirname(__DIR__)) . '/backend/services',
],
'excludePaths' => [
dirname(dirname(__DIR__)) . '/runtime/aspect',
dirname(dirname(__DIR__)) . '/vendor',
],
'aspectDir' => dirname(dirname(__DIR__)) . '/aspect',
'ignoreAnnotations' => ['specialAnnotation1', 'specialAnnotation2'],
// 'pointcutConfig'=>'\services\aop\PointcutConfigProvider',
'pointcutConfig'=>[
'modules\test\controllers\TestController' => [
'actionTest'
],
]
]
],
]
- 通用配置说明
属性 | 含义 | 说明 |
---|---|---|
tenantIdentifierReaderConfig | 租户标识读取配置 | 与 tenantIdentifierReaderClass 二选一,支持多个参数来源,同一来源的多个参数以','分隔 |
tenantIdentifierReaderClass | 租户标识读取类 | 与 tenantIdentifierReaderConfig 二选一,自定义租户标识读取类,继承基类 \iAop\base\AbstractTenantIdentifierReader |
aopHeaderFlag | 请求返回头部中的aop标识 | 请求返回头部中携带的租户标识,选填,默认为X-Aop |
autoloadTenantCode | 是否自动加载租户代码(性能优化) | 默认为false,iAop每次都会使用内部的租户代码加载器加载租户代码,在压测时对性能有一定的影响(一般场景下大约20%的性能损耗)。配置为true时,不会使用内部的租户代码加载器,而是依赖composer的自动加载机制加载代码, 需要在项目composer.json文件中配置 "autoload": {"classmap": ["customization/"]}, 然后执行 ` composer dumpautoload` ,否则可能会报找不到类文件。生产环境建议配置为true以提升性能 |
isAopEnabled | 是否开启aop功能,bool类型,默认为false(关闭) | 部分用户只使用原生AOP功能,此开关适用于原生aop场景;对于智能aop场景,此开关会自动开启,不用设置 |
aopDebug | 是否开启aop调试模式, bool类型,默认为false(关闭) | 开启调试功能后每次会检测文件更改,生成缓存文件,有一定性能损耗,生产环境建议关闭调试模式 |
- greyTenantConfig配置说明
属性 | 含义 | 说明 |
---|---|---|
configProviderClass | 灰度租户配置提供类 | 选填,继承基类iAop\base\GreyTenantConfigProviderBase,返回数据格式可参考 ./demo/greytenant 文件夹下DemoGreyTenantConfigProvider文件 |
methodConfigKey | 灰度租户可用方法配置key的值 | 通过该key的值从参数中读取灰度租户可用方法的配置,格式参照如下示例 |
paramConfigKey | 灰度租户可用参数配置key的值 | 通过该key值从参数重读取灰度租户可用参数的配置,格式参照如下示例 |
methodConfigKey对应配置的数据格式为
[
'poly' => [
'grey\modules\api\controllers\ApiController' => [
'actionList'
],
'grey\backend\controllers\MsgController' => [
'actionSend'
]
],
'bgy' => [
'grey\modules\api\controllers\ApiController' => [
'actionList'
],
]
]
paramConfigKey对应配置的数据格式为
[
'poly' => [
'email_config'
]
]
- aspectConfig配置说明(AOP配置)
属性 | 含义 | 说明 |
---|---|---|
appDir | 应用目录,用于读取 aop 注解 | 选填,默认为项目vendor上一层目录 |
cacheDir | aop 缓存目录,需要读写权限 | 选填,默认为 runtimePath |
includePaths | aop 检索目录 | 选填,数组格式,默认为项目目录 |
excludePaths | aop 检索排除目录 | 选填,数组格式,一般情况下排查 vendor 目录或缓存目录即可 |
aspectDir | 自定义切面目录 | 选填,切面编写语法可参考 ./demo/aspect 文件夹下实例代码 |
ignoreAnnotations | 忽略注解中@开头的关键字 | 选填,数组格式,默认已录入 showdoc 的关键字,可累加 |
pointcutConfig | 切点配置 | 选填,数组格式,也可以实现 \iAop\interfaces\PointcutConfigProviderInterface 接口,以类的方式提供,推荐后种方式 |
pointcutConfig切点配置说明
切点配置定义用于替换原来在标准产品代码注释加切点的方式,通过这种方式,可以实现不改动标准产品代码(不需要发版)增加切点。 数据格式举例:
[
'modules\test\controllers\TestController' => [
'actionTest'
],
'backend\controllers\HelpController' => [
'actionTest'
],
'services\TestService' => [
'base','one','two'
],
'services\OrderService' => [
'order'
]
]
注意: 改完配置需要清理一次aop缓存目录,新切点才能生效。
三、命令行使用
若要在命令行中使用,需要修改你的命令行程序,其controller基类需要增加如下代码:
public $XAopTenant;
public function options($actionID)
{
return array_merge(parent::options($actionID), ['XAopTenant']);
}
命令行执行的时候传递该参数标识租户,例如:php yii sync-handle/index --XAopTenant=rongxin
租户个性化参数
- 获取租户个性化参数配置
\Yii::$app->iAop->getParamValue('demo_key');
详细文档请查看这个链接。