在队列中动态切换MySQL数据源,会导致数据串库
1. 运行环境
LNMP
1). 当前使用的 Laravel 版本?
8.12
2). 当前使用的 php/php-fpm 版本?
PHP 版本:7.4
3). 当前系统
CentOS
4). 业务环境
开发环境,单节点未使用负载均衡
5). 相关软件版本
MySQL8.0
2. 问题描述?
系统是一个多租户的Saas系统,存在多数据库,需要根据用户切换数据源,同步请求时是正常的,当采用redis异步队列的时候,切换数据源后,执行异步操作,会发生串库现象。config()->set没有生效。
//对列中修改数据库的配置
config()->set('database.connections.mysql_master.host', $dbConfig['host']);
config()->set('database.connections.mysql_master.port', $dbConfig['port']);
config()->set('database.connections.mysql_master.database', $dbConfig['database']);
config()->set('database.connections.mysql_master.username', $dbConfig['username']);
config()->set('database.connections.mysql_master.password', $dbConfig['password']);
$this->connection = 'mysql_master';
3. 您期望得到的结果?
异步队列内切换数据库成功,写入对应的数据库
4. 您实际得到的结果?
队列内业务部分写到目标库,部分写到其它数据库,发生串库问题。
推荐文章: