Skip to content

Latest commit

 

History

History
256 lines (191 loc) · 9.2 KB

APPLICATION.md

File metadata and controls

256 lines (191 loc) · 9.2 KB

业务接入文档

一、快速接入

1、修改配置

只需要修改 consumer.php 配置文件中的broker_list_stringgroup_idtopic这三个必须的配置项即可, 否则无法正常消费数据。

其他非必须的配置请参考应用配置文档。

2、创建应用

/app/目录下,创建一个以业务为命名规范的应用名称,如/app/alpha/

3、创建事件回调

在上一步中创建的应用目录下,创建一个Handler事件回调类

如果需要在事件回调中做大量复杂的业务操作,可以创建一个对应的Service业务处理类 :

建议无论业务是否复杂,都把业务放在Service中操作。

1、在业务Service中可以自由的调用common应用下的DBServiceESService等服务

2、如果业务更复杂,可以考虑在应用目录下设计属于自己的业务分层,如daosservices

3、你可以直接选择使用 AutoGenerateCallback扩展 实现事件回调模块的自动创建,免去手动操作此步的过程 !

4、注册事件回调

/config/event.php配置文件中添加一个新的键值对,表示当数据库.数据表出现变更事件时,由对应的事件Handler响应处理。

$event = [
    // 当alpha数据库中的user表发生INSERT/UPDATE/DELETE事件时,
    // 系统会自动创建\app\alpha\user\UserHandler事件回调类,
    // 并根据不同的事件类型调用不同的方法, 如INSERT事件则调用回调类的onInsert()方法
    'alpha.user' => '\app\alpha\user\UserHandler',
];

除此之外,框架还支持更加强大的事件注册和驱动机制,如果需要请参考高级事件配置

5、部署项目

至此业务接入部分已经完成,参考 部署管理 部分部署代码即可。

二、应用配置

1、消费配置

配置文件 /config/consumer.php,设置Kafka的消费配置

<?php

$consumer = [
    // 检测消费状态的触发数, 单位为秒
    'check_status_interval_seconds' => 2,
    // broker服务器列表,如果多个则以逗号分割,如192.168.0.18:9092,192.168.0.18:9093
    'broker_list_string'            => '192.168.0.18:9092',
    // 消费分区
    'partition'                     => 0,
    // 消费超时时间, 单位毫秒
    'timeout_millisecond'           => 2 * 1000,
    // 消费组id
    'group_id'                      => '',
    // 消费主题
    'topic'                         => '',
    // worker的最大进程数
    'max_worker_count'              => 10,
];

2、数据库配置

配置文件 /config/db.php,设置访问数据库的配置

<?php

$db = [
    'database' => [
        'host'     => '数据库地址',
        'port'     => 3306,
        'username' => '用户名',
        'password' => '密码',
        'database' => '数据库',
        'charset'  => 'utf8mb4',
    ]
];

3、ES配置

配置文件 /config/es.php,设置访问ES的配置

<?php

$es = [
    'host'          => 'ES服务host',
    'port'          => 'ES服务端口',
    'user_password' => 'ES服务凭证',
    'doc_type'      => '_doc'
];

4、日志配置

/start.sh启动脚本中,docker run -v ... 会把容器中配置的日志目录挂载到本机相应目录中

配置文件 /config/log.php,配置了不同日志级别的文件路径,如下所示

<?php

$log = [
    'debug'   => '/home/log/esupdater/debug.log',
    'info'    => '/home/log/esupdater/info.log',
    'slow'    => [
        'millisecond' => 500, // work进程处理耗时超过500ms则记录慢日志
        'path'        => '/home/log/esupdater/slow.log',
    ],
    'warning' => '/home/log/esupdater/warning.log',
    'error'   => '/home/log/esupdater/error.log',
    'fatal'   => '/home/log/esupdater/fatal.log',
];

5、事件配置

配置文件 /config/event.php,如下所示

  • Key :数据库名.表名
  • Value : Handler

表示当此数据表的数据更新时,由对应的Handler处理

<?php

$event = [
    'alpha.user' => '\app\alpha\user\UserHandler',
];

(1) 高级事件配置

上面的这种Key所对应的Value为字符串的配置方式,是一种简单的自动回调配置。 如果Value是Map时,就会使用高级事件配置。

这个Map会再次以如onInsertonUpdateonDelete不同的事件为key,value则由以下几种回调函数组成,分别为 :

  • filter 过滤器 [可选] :实现对Canal数据的过滤处理、对事件回调的拦截
  • callback 事件回调 [可选] :实现事件的回调处理
  • finally 末尾执行 [可选] :实现事件的兜底处理,可用于统计数据、记录日志等

关于高级事件配置可以参考 高级配置示例

6、单测配置

配置文件 config/test.php,如下所示

<?php

$test = [
    // 所有单元测试用例所在的统一目录
    'testcases_directory' => 'test/testcases/',
];

三、系统变量

/.env文件中记录了服务所需要的所有系统变量,在执行install.sh安装脚本时完成系统变量的设置,并由/framework/Environment.php类解析并处理。

四、部署管理

1、容器化部署

如果部署过程中出错,请参考容器部署帮助文档。

(1) 启动

bash ./start.sh

(2) 停止

bash ./stop.sh

(3) 重启

bash ./restart.sh

2、运行时配置

可以在/start.sh脚本中执行docker run时设置核心数目录挂载等参数,请自定义修改。

如果需要设置更多的容器参数,可以参考官方文档

Id 配置名称 配置参数 参数值 默认值 释义
1 核心数 --cpus float 1.5 设置允许的最大核心数
2 CPU核心集 --cpuset-cpus int 未设置 设置允许执行的CPU核心
3 内存核心集 --cpuset-mems int 未设置 设置使用哪些核心的内存
4 目录挂载 -v string /home/log/esupdater 设置容器挂载的目录

五、单元测试

根目录下的/test目录是单元测试目录,其中有一个/test/run.php入口文件,它会自动执行 testcases_directory 目录下所有的测试用例。

1、手动测试

php test/run.php

2、自动测试

cp test/prepare-commit-msg ./.git/hooks
chmod +x .git/hooks/prepare-commit-msg

# 此后提交代码会自动执行单元测试,只有单测成功才会允许提交代码
git add .
git commit -m "add: xxx"

如下图实际使用中,每次Commit代码会自动执行测试。

img

3、添加用例

test/testcases/app目录下,先创建应用目录(如alpha),然后在此目录下以Test*开头创建单测文件即可,具体内容可参考 TestUserService 单测文件

4、测试报告

在测试运行结束后,会自动生成一个测试报告/test/report/index.html文件,点击这里查看报告