phalcon:数据库分库,读写分离,负载均衡 系统方法执行顺序

phalcon:数据库分库,读写分离,负载均衡 系统方法执行顺序

用命名空间区分不同的数据库实例,对应代码结构上是不同的目录区分,在同一目录下基类负责初始化连接。连接来自初始化时注入的多个db服务

隐规则:

  • initialize()在每个请求期间只会调用一次

  • 为每个 new 创建的实例执行初始化任务使用onConstruct()

namespace CompanyModelsNotification;


 1 /**
 2  * Class BaseModel
 3  *
 4  * beforeSave()和afterFetch()成对使用,用于读写数据时自动转化数据。
 5  * 例如自动执行serialize unSerialize
 6  *
 7  * save()发生时事件调用顺序是
 8  * initialize,
 9  * onConstruct,
10  * beforeValidation,
11  * beforeValidationOnCreate,
12  * afterValidationOnCreate,
13  * afterValidation,
14  * beforeSave,
15  * beforeCreate,
16  * afterCreate,
17  * afterSave,
18  *
19  * @package CompanyModelsNotification
20  */
21 class BaseModel extends PhalconMvcModel
22 {
23  
24     /**
25      * - initialize()在每个请求期间只会调用一次
26      * - 子类必需调用父类方法
27      * - 为每个 new 创建的实例执行初始化任务使用onConstruct()
28      */
29     public function initialize()
30     {
31         $this->setConnectionService('db_notification');
32          
33         //$this->setConnectionService('node1');
34         //$this->setConnectionService('node2');
35         //
36         //真实场景可能使用mysqlnd_ms扩展或者haproxy
37         //仅演示读负载均衡一种思路
38         //$dbSlave = ['node1', 'node2', 'node3'];
39         //$key = array_rand($dbSlave);
40         //$db = $dbSlave[$key];
41         //$this->setReadConnectionService($db);
42         //
43         //
44         //$this->setReadConnectionService('dbRead');
45         //$this->setWriteConnectionService('dbWrite');
46     }
47 }
原文地址:https://www.cnblogs.com/huanhang/p/7240230.html