php - Laravel 无法处理队列模型,但能够处理没有队列的代码
问题描述
我正在尝试在我的一个项目中设置事件、侦听器和作业。如果我删除“implements ShouldQueue”,代码就可以运行。但是一旦我将实现 ShouldQueue 包含到 Job 类中,它就会停止工作
我的 EventServiceProvider
class EventServiceProvider extends ServiceProvider
{
protected $listen = [
Registered::class => [
SendEmailVerificationNotification::class,
],
'App\Events\IncorpPaid' => [
'App\Listeners\ProcessIncorpReceived',
],
];
}
我的活动课
Namespace App\Events;
use App\Company;
use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class IncorpPaid
{
use Dispatchable, SerializesModels;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(Company $company)
{
$this->company = $company;
}
}
我的听众
namespace App\Listeners;
use App\Company;
use App\Events\IncorpPaid;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Http\Request;
use Illuminate\Queue\SerializesModels;
class ProcessIncorpReceived
{
//use SerializesModels;
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
}
/**
* Handle the event.
*
* @param IncorpPaid $event
* @return void
*/
public function handle(IncorpPaid $event)
{
\App\Jobs\SendKYC::dispatch($event->company);
}
}
最后是我的问题代码。
以下作品。但问题是使用它不会排队工作。
namespace App\Jobs;
use App\Company;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
class SendKYC
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct(Company $company)
{
$this->company = $company;
}
/**
* Execute the job.
*
* @return void
*/
public function handle(Company $company)
{
//error_log(print_r($this->company->puc,true));
// error_log(print_r($company,true));
\App\Services\SendDocsForSignature::processKYC($this->company);
}
}
但这会使工作排队,但它不起作用。$this->company 返回一个空白的公司模型。
namespace App\Jobs;
use App\Company;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
class SendKYC implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct(Company $company)
{
$this->company = $company;
}
/**
* Execute the job.
*
* @return void
*/
public function handle(Company $company)
{
\App\Services\SendDocsForSignature::processKYC($this->company);
}
}
解决方案
您的最后一个代码片段看起来几乎是正确的。您只需要声明要在其中存储$company
值的实例变量。换句话说,您需要添加protected $company;
到您的SendKYC
类才能将$company
值分配给$this->company
.
你SendKYC
的课应该这样开始:
class SendKYC implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $company;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct(Company $company)
{
$this->company = $company;
}
推荐阅读
- sql-server - SQL Server 快照复制 - 无法启动发布者快照代理
- tensorflow - 如何将 CoreML 模型中的输出名称从 Identity 更改为其他名称?
- php - 无法使用 phpMyAdmin 获取数据
- python - 附加到列表时未调用 Setattr 方法
- h2 - H2中序列的同义词创建
- pandas - 在熊猫中添加零行
- gnu-make - 如何在配方中的宏中嵌入换行符?
- python - 从文本中提取字母数字和数字+特殊字符
- python-3.x - 在 Flask 网站上显示从网络上抓取的数据
- reactjs - react-native 的 useEffect 错误还是逻辑错误?