Laravel 5.5:如何为通知的不同频道设置不同队列名?
解决Laravel通知不同频道使用不同队列的问题
要实现让mail频道的通知任务进入emails队列,而database频道保留在notifications队列,你可以利用Laravel通知系统内置的viaQueues方法为每个频道单独指定队列,具体操作如下:
1. 修改通知类配置队列映射
在DogWasWalkedNotification类中,添加(或重写)viaQueues方法,这个方法返回一个关联数组,键为频道名称,值为对应要使用的队列名称:
<?php namespace App\Notifications; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Notifications\Notification; class DogWasWalkedNotification extends Notification implements ShouldQueue { use Queueable; // 你的构造函数及其他业务逻辑方法... /** * 为每个通知频道分配对应队列 * * @return array */ public function viaQueues() { return [ 'mail' => 'emails', // mail频道任务进入emails队列 'database' => 'notifications' // database频道任务保留在notifications队列 ]; } // 你的via方法、各频道消息构建方法... }
2. 清理全局队列设置(如有)
如果你之前在通知类的构造函数中通过$this->onQueue('notifications')设置了全局队列,现在可以移除这行代码——viaQueues方法的优先级更高,会覆盖全局队列配置,为每个频道单独指定队列。
3. 确保队列Worker监听目标队列
启动队列Worker时,记得同时监听notifications和emails队列(或根据需求单独监听):
# 按顺序监听多个队列,前面的队列优先级更高 php artisan queue:work --queue=emails,notifications
完成以上配置后,当你触发$event->dogowner->notify(new DogWasWalkedNotification);时:
database频道的通知任务会进入notifications队列mail频道的通知任务会进入emails队列
内容的提问来源于stack exchange,提问作者Wonka
相关产品推荐
相关产品推荐

