Laravel通知门面队列响应时间
Laravel文档解释说,在分派/发送通知时,您可能希望将它们排队以加快应用程序响应时间 这正是我想要做的,但是我使用通知外观而不是应通知特性来称呼它。我关心的是前者绕过了队列,我需要它立即通知一组用户 正如文件中所说: 或者,您可以通过通知门面发送通知。 这主要在您需要向发送通知时非常有用 多个应报告实体,如用户集合 但当我通过门面调用通知时,它不会排队。我知道这一点,因为当我监视我的网络请求并注释掉facade调用时,我的请求从超过2秒(带有通知调用)到不足0.5秒(当我注释掉它时) 下面是使用队列(Laravel通知门面队列响应时间,laravel,laravel-5.5,Laravel,Laravel 5.5,Laravel文档解释说,在分派/发送通知时,您可能希望将它们排队以加快应用程序响应时间 这正是我想要做的,但是我使用通知外观而不是应通知特性来称呼它。我关心的是前者绕过了队列,我需要它立即通知一组用户 正如文件中所说: 或者,您可以通过通知门面发送通知。 这主要在您需要向发送通知时非常有用 多个应报告实体,如用户集合 但当我通过门面调用通知时,它不会排队。我知道这一点,因为当我监视我的网络请求并注释掉facade调用时,我的请求从超过2秒(带有通知调用)到不足0.5秒(当我注释掉它时) 下面
NewAsset
)的通知类的开始:
我做错了什么
哦。。。似乎正在触发队列:
php artisan queue:listen
[2018-03-31 15:48:22] Processing: App\Notifications\NewAsset
[2018-03-31 15:48:22] Processed: App\Notifications\NewAsset
[2018-03-31 15:48:23] Processing: App\Notifications\NewAsset
[2018-03-31 15:48:23] Processed: App\Notifications\NewAsset
[2018-03-31 15:48:24] Processing: App\Notifications\NewAsset
[2018-03-31 15:48:24] Processed: App\Notifications\NewAsset
[2018-03-31 15:48:25] Processing: App\Notifications\NewAsset
[2018-03-31 15:48:25] Processed: App\Notifications\NewAsset
那为什么这么慢呢(Notification::send速度慢(>2秒),可能是有数千个应通知实体推送到数据库队列,这很慢,因为在数据库上执行了数千条插入语句。要改进,您可以:
php artisan make:job QueueUserNotificationsJob
YourController.php
dispatch(new QueueUserNotificationsJob(Auth::user()->id));
public $authUserId = null;
public function __construct($authUserId) {
$this->authUserId = $authUserId;
}
public function handle() {
$users = User::where("id", "!=", $this->authUserId)->get();
Notification::send($users, new NewAsset($asset, $this->authUserId));
}
QueueUserNotificationsJob.php
dispatch(new QueueUserNotificationsJob(Auth::user()->id));
public $authUserId = null;
public function __construct($authUserId) {
$this->authUserId = $authUserId;
}
public function handle() {
$users = User::where("id", "!=", $this->authUserId)->get();
Notification::send($users, new NewAsset($asset, $this->authUserId));
}
Notification::send
很慢(>2秒),很可能是有数千个应通知的实体推送到数据库队列,这很慢,因为在数据库上执行了数千条插入语句。要改进,您可以:
php artisan make:job QueueUserNotificationsJob
YourController.php
dispatch(new QueueUserNotificationsJob(Auth::user()->id));
public $authUserId = null;
public function __construct($authUserId) {
$this->authUserId = $authUserId;
}
public function handle() {
$users = User::where("id", "!=", $this->authUserId)->get();
Notification::send($users, new NewAsset($asset, $this->authUserId));
}
QueueUserNotificationsJob.php
dispatch(new QueueUserNotificationsJob(Auth::user()->id));
public $authUserId = null;
public function __construct($authUserId) {
$this->authUserId = $authUserId;
}
public function handle() {
$users = User::where("id", "!=", $this->authUserId)->get();
Notification::send($users, new NewAsset($asset, $this->authUserId));
}
您是否在您的用户模型中包含了应通知的特征?@WhyDoesMyCodeWork是的,已确认它在那里。@WhyDoesMyCodeWork请参阅命令行输出编辑…队列使用的是哪个驱动程序?@WhyDoesMyCodeWork数据库您是否在您的用户模型中包含了应通知的特征?@WhyDoesMyCodeWork是的,已确认它在那里。@WhyDoesMyCodeWork请参阅comm和行输出编辑…你在队列中使用哪个驱动程序?@WhyDoesMyCodeWork数据库我认为
在通知上实现的应该队列
和可排队
的全部要点是将其排队而不必这样做。不是以异步的方式运行通知::发送
,还是不创建新作业与在通知本身上实现ShouldQueue
之间有什么区别?延迟用于将作业推入队列(创建作业),不消耗作业。如果将数据库用作队列驱动程序,则它不会作为工作队列进行优化,它只是逐个插入作业,这是非常缓慢的操作。这就是为什么我们将使用替代队列驱动程序。因此,通过使用一个作业对各种通知进行排队,我可以避免延迟…此时我不能使用其他驱动程序。请执行通知然后需要ShouldQueue
和Queueable
或者我可以摆脱它们吗?还有一些文档或源代码,你可以告诉我关于创建
与消费
作业和队列以及相关的时间安排吗?这对我来说非常有趣。ShouldQueue
应该实现,如果你需要的话nt将作业分配给不同的工人。例如,您有4个工人,没有ShouldQueue
,新的实现一个工人用于创建和使用作业,但是ShouldQueue
实现后,一个工人用于创建作业,之后,所有工人都用于使用作业。这就是区别。我认为在通知上实现ShouldQueue
和Queueable
是在不必这样做的情况下对其进行排队。运行Notification::send
的方式是否应该是异步的?这就是创建新作业和在通知本身上实现ShouldQueue
之间的区别所在?lag用于将作业推入队列(创建作业),不消耗作业。如果将数据库用作队列驱动程序,则它不会作为工作队列进行优化,它只是逐个插入作业,这是非常缓慢的操作。这就是为什么我们将使用替代队列驱动程序。因此,通过使用一个作业对各种通知进行排队,我可以避免延迟…此时我不能使用其他驱动程序。请执行通知然后需要ShouldQueue
和Queueable
或者我可以摆脱它们吗?还有一些文档或源代码,你可以告诉我关于创建
与消费
作业和队列以及相关的时间安排吗?这对我来说非常有趣。ShouldQueue
应该实现,如果你需要的话nt将作业分派给不同的工作人员。例如,您有4个工作人员,如果没有ShouldQueue
,新的实现一个工作人员用于创建和使用作业,但是ShouldQueue
实现后,一个工作人员用于创建作业,之后,所有工作人员都用于使用作业。这就是区别。