我有一个事件侦听器,当事件触发时,它将触发通知。 当我不实现ShoulQueue类时,将发送通知电子邮件。当实施ShouldQueue时,不会发送电子邮件。我在下面添加了我的代码。
监听器:
class CustomRequestListener
{
public function handle(CustomRequestCreated $event)
{
$user->notify(new CustomRequestEmail());
}
}
通知类别
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
class CustomRequestEmail extends Notification implements ShouldQueue
{
use Queueable;
public function via($notifiable)
{
return ['mail'];
}
public function toMail($notifiable)
{
return (new MailMessage)
->subject('Test Mail')
->view('layout.testmail.template');
}
}
queue.php
'default' => env('QUEUE_DRIVER', 'sync'),
'connections' => [
'sync' => [
'driver' => 'sync',
],
....
]
.env
QUEUE_DRIVER=sync
答案 0 :(得分:1)
您是否在本地环境上对此进行测试?
如果是这种情况,您应该在队列上侦听,否则不会触发任何事情
以下命令将开始您的队列。保持命令运行以继续监听:
php artisan horizon
php artisan queue:work
不是本地的吗?
确保您的服务器上正在运行队列工作器,部署新代码时需要将其重置。与主管一起使用Horizon是一种很好的处理方式。
答案 1 :(得分:0)
您可以通过以下方式重试(我假设您在 Laravel 文档中做了说明,但总有一天它不起作用):
第 1 步:删除数据库中的表“jobs”。
第 2 步:在控制台中运行命令 'php artisan migrate' 以再次创建表 'jobs'。
第 3 步:在控制台中运行命令 'php artisan queue:work'
第 4 步:重试您的应用
请注意,在 .env 文件中,您设置了:
QUEUE_CONNECTION=数据库
QUEUE_DRIVER=数据库
P/s:对我有用!
希望它适合你。