Php Laravel 5.4多站点,每个站点都有队列
My Laravel是使用多站点中间件提供程序设置的,该提供程序检查地址的子域,并根据该子域动态更改与另一个数据库的连接 e、 g 这一切都非常好,除了我现在想使用内置数据库驱动程序的Laravel队列(同步实际上可以很好地工作,但会阻碍长时间生成报告的用户体验) 除了Artisan不确定要连接到哪个数据库,所以我猜它连接到默认数据库,这是一种存储所有子域和相应数据库名称等的主管数据库 注意,这些数据库中没有一个是作为连接设置在我的数据库配置中的,它们存储在一个单一的管理数据库中,因为其中有很多 我已尝试克隆内置队列侦听器,并将其修改为交换到不同的站点连接,如下所示:Php Laravel 5.4多站点,每个站点都有队列,php,laravel,laravel-5.4,laravel-queue,Php,Laravel,Laravel 5.4,Laravel Queue,My Laravel是使用多站点中间件提供程序设置的,该提供程序检查地址的子域,并根据该子域动态更改与另一个数据库的连接 e、 g 这一切都非常好,除了我现在想使用内置数据库驱动程序的Laravel队列(同步实际上可以很好地工作,但会阻碍长时间生成报告的用户体验) 除了Artisan不确定要连接到哪个数据库,所以我猜它连接到默认数据库,这是一种存储所有子域和相应数据库名称等的主管数据库 注意,这些数据库中没有一个是作为连接设置在我的数据库配置中的,它们存储在一个单一的管理数据库中,因为其中有很多
/**
* Create a new queue listen command.
*
* @param \Illuminate\Queue\Listener $listener
* @return void
*/
public function __construct(Listener $listener)
{
// multisite swap
$site = MultiSites::where('machine_name', $this->argument('site'));
MultiSites::changeSite($site->id);
parent::__construct();
$this->setOutputHandler($this->listener = $listener);
}
但这一点在某些情况下是行不通的
侦听器类缺少$commandPath参数
在fire()或handle()方法中尝试类似的数据库/站点交换会停止$commandPath错误,但是它什么也不做,没有反馈,也不会开始处理数据库中的任何作业
我不知道如何在多站点环境下工作,有人有什么想法吗?或者我是不是走错了方向
我的理想方案是能够运行一个单独的队列命令,让主管监视该命令,并让它跳过每个数据库检查。但是,如果需要的话,我也愿意为每个数据库/站点生成队列命令。这不是单纯由PHP解决的问题,您需要为每个站点设置新的队列工作者(我猜),因此您需要某种队列管理器(可以用PHP完成),但我会使用一些bash或Ansible之类的服务器配置工具。祝你好运我打算写一个bash脚本来生成它们,并自动将新站点附加到该脚本中,然后使用supervisor确保所有内容都保持运行?我根本不知道您的硬件架构和软件架构,所以我无法判断。如果你有了supervisord的想法,你可能也会喜欢用systemd来代替我不知道。Supervisord只是想保持队列畅通(如果发生崩溃)。因此,您需要能够修改supervisord的配置,如果有更改(添加/删除站点),则应用更改。我不是supervisord专家,但我会为每个站点创建一个配置文件(针对supervisord),并将它们全部包含在
/etc/supervisor/conf.d/*.conf
中。
/**
* Create a new queue listen command.
*
* @param \Illuminate\Queue\Listener $listener
* @return void
*/
public function __construct(Listener $listener)
{
// multisite swap
$site = MultiSites::where('machine_name', $this->argument('site'));
MultiSites::changeSite($site->id);
parent::__construct();
$this->setOutputHandler($this->listener = $listener);
}