Laravel - 在运行前获取队列数据

Posted

技术标签:

【中文标题】Laravel - 在运行前获取队列数据【英文标题】:Laravel - Get queue data before run 【发布时间】:2020-03-23 12:48:05 【问题描述】:

我想在我的队列中发送一个自定义数据,并希望在操作运行之前捕获这些数据。

对我来说最好的可能性是发送一个标头值,这样我就可以使用getallheaders() 来读取这些数据,但我确实读过并且没有发现这种可能性。

由于无法发送header,我如何在异步返回执行之前读取数据?

更新

我有多个数据库,因为 Queueable 属性有问题。

我没有默认连接:

'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),

否则我有:

'connections' => [
   'database1' => [//...],
   'database2' => [//...],
]

我的项目运行良好,我可以毫无问题地进行迁移和一切工作。 但是我没有“默认”数据库,我需要在加载时设置他,所以我在队列对象中的问题是因为我不知道选择哪个数据库。

要知道选择哪个数据库,我需要通过队列知道。

【问题讨论】:

您能展示一个代码示例来说明您目前所拥有的吗?这将有助于更好地描绘您正在尝试做的事情,因为我对您想要实现的目标有点困惑。 @James 我更新了问题。 一般情况下,您如何知道选择哪个数据库? @mrhn 前端告诉它想要哪个数据库 【参考方案1】:

创造工作https://laravel.com/docs/6.x/queues#creating-jobs

您可以在对作业进行排队时将连接名称分配给属性。当从队列中运行作业时,任何属性都将被序列化以供以后使用。只需检索该值并根据需要使用它。

SomeJob.php

class SomeJob implements ShouldQueue

    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    // make a property to store the connection
    protected $connection;

    public function __construct()
    
        // do some logic to determine which connection should be used and store it
        $this->connection = 'database1';
    

    public function handle()
    
        // run the job using the stored connection
        DB::connection($this->connection)->select(...);
    

【讨论】:

以上是关于Laravel - 在运行前获取队列数据的主要内容,如果未能解决你的问题,请参考以下文章

退出终端时运行laravel队列侦听

如何在 redis 上的 laravel 队列中获取所有待处理的作业?

手把手教你跑 Larave 框架实战笔记系列之一

Laravel 的参数获取

如何在子目录 Laravel 中正确配置 htaccess?

我想自学laraver,请诸位前辈给一些建议,谢谢