Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 5.4多站点,每个站点都有队列_Php_Laravel_Laravel 5.4_Laravel Queue - Fatal编程技术网

Php Laravel 5.4多站点,每个站点都有队列

Php Laravel 5.4多站点,每个站点都有队列,php,laravel,laravel-5.4,laravel-queue,Php,Laravel,Laravel 5.4,Laravel Queue,My Laravel是使用多站点中间件提供程序设置的,该提供程序检查地址的子域,并根据该子域动态更改与另一个数据库的连接 e、 g 这一切都非常好,除了我现在想使用内置数据库驱动程序的Laravel队列(同步实际上可以很好地工作,但会阻碍长时间生成报告的用户体验) 除了Artisan不确定要连接到哪个数据库,所以我猜它连接到默认数据库,这是一种存储所有子域和相应数据库名称等的主管数据库 注意,这些数据库中没有一个是作为连接设置在我的数据库配置中的,它们存储在一个单一的管理数据库中,因为其中有很多

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);
}