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 - 在运行前获取队列数据的主要内容,如果未能解决你的问题,请参考以下文章
如何在 redis 上的 laravel 队列中获取所有待处理的作业?