多进程处理任务,但每个任务涉及的数据库可能不一样(多租户),怎么维护数据连接呢
目的是开多个worker进程处理不同租户的异步任务
最大总连接数 = 进程数量 * 租户数量
租户有1000,进程10个,那么每个进程维护的数量就是1万
用 https://github.com/illuminate/database 或者 https://www.kancloud.cn/manual/think-orm/1257998 ,他们都支持多数据库啊。 比如thinkorm,使用使用哪个数据库就直接调用 Db::connect('db1')->table('table1')->where()....; 数据初始化放在onWorkerStart里调用 Db::setConfig(config('thinkorm')); 。
Db::connect('db1')->table('table1')->where()....
Db::setConfig(config('thinkorm'));
我觉得你可以直接用webman https://www.workerman.net/doc/webman ,队列任务、多数据库都有文档,直接用
这个办法我明白,只是每个租户都是不同的数据,这样一来每个进程都可能需要有db1....db1000
可能在每次请求 取到租户的数据库名称,然后 在执行 Db::query('use database xxxx'); 了
用 https://github.com/illuminate/database 或者 https://www.kancloud.cn/manual/think-orm/1257998 ,他们都支持多数据库啊。
比如thinkorm,使用使用哪个数据库就直接调用
Db::connect('db1')->table('table1')->where()....
;数据初始化放在onWorkerStart里调用
Db::setConfig(config('thinkorm'));
。我觉得你可以直接用webman https://www.workerman.net/doc/webman ,队列任务、多数据库都有文档,直接用
这个办法我明白,只是每个租户都是不同的数据,这样一来每个进程都可能需要有db1....db1000
可能在每次请求 取到租户的数据库名称,然后 在执行 Db::query('use database xxxx'); 了