美文网首页laravel核心
laravel队列、消息通知和观察者模式的理解

laravel队列、消息通知和观察者模式的理解

作者: 云龙789 | 来源:发表于2018-09-18 13:36 被阅读15次

推荐
设计模式-PHP观察者设计模式
laravel事件监听--模型事件新特性
深入了解laravel消费队列的两种工作模式

看了laravel手册,有时候不太理解队列、观察者模式、通知等,这些功能的区别。想着直接在方法中处理数据库不一样吗?

  • 队列理解
    其实队列适用于处理那些处理时间比较长的时间的事情,一般来说是针对短信,邮件获取其他与第三方接口对接的应用比较实用。其实队列是把事件往数据库或者redis等驱动里面做了一次记录。如果你的事件只是需要改动数据表中的某个字段值的话,则不如直接对数据库做修改比较方便,而不要实用队列。
    队列并不会使程序变得更快,它是为了让数据变得合法。比如你完成了一个任务,需要做相应的积分处理,这个时候,可能会涉及到计算量比较大,一步步计算,所以可以放在队列里面去执行,即使计算量比较大,也会一步步来,不会导致系统崩溃。而创建任务后分发给每个用户,就不需要使用队列,因为没意义。分发也是一条SQL语句搞定的事情

  • 消息通知
    消息通知和直接对数据库修改也是一样的。只是佸䊟通知多了「频道(via)」这个概念。你可以比较方便的切换实用邮件(toMail),还是实用数据库(toDatabase)通知。如果你百分比确定只实用数据库通知,其实你根本不需要实用消息通知这中写法
    对了,如果你需要通知的类做了implements ShouldQueue的实例化,则默认会放到队列中处理。
    对了,如果使用队列,则先后时间可以很好的把控。如果不适用队列,则在数据库中做一个队列时间先后顺序即可。不过这样的话,就没有队列优先级的概念了。但是依然可以添加一个字段作为优先级,按照优先级和时间排序显示即可。order by height,create_time

  • 事件系统
    其实事件系统主要是使用了观察者模式。这个跟以上两种情况不一样。
    之前看到一篇文章讲解的是在注册功能中的使用。如果你注册后,需要给用户发送短信,注册时间记录等多个操作,你可能需要不断的扩展。但是使用了事件系统,你就可以很方便的处理这些问题。代码看上去更加简洁。但还是那句话,如果你只有一项需求触发,还是直接处理数据库即可
    laravel事件监听--模型事件新特性

应用观察者模式的好处:
观察者模式解除了主体和具体观察者的耦合,让耦合的双方都依赖于抽象,而不是依赖具体。从而使得各自的变化都不会影响另一边的变化。降低对象之间的耦合度以达到解耦的目的,符合"开闭原则"的要求。

laravel 框架中,我分别使用了databasesync两种模式测试了队列,说明队列确实是要过数据库的

队列测试

队列

在队列中,实例化 implements ShouldQueue 才会异步执行。

<?php
namespace App\Jobs;
use Illuminate\Contracts\Queue\ShouldQueue;
class SendEmail implements ShouldQueue
{
.
.
.
 public function __construct($user)
    {
        $this->delay(5); // 这是多少秒之后执行程序,适用于支付
    }
}

相关文章

  • laravel队列、消息通知和观察者模式的理解

    推荐设计模式-PHP观察者设计模式laravel事件监听--模型事件新特性深入了解laravel消费队列的两种工作...

  • 编程模式·观察者模式、事件通知、消息队列三者区别

    观察者模式、事件通知、消息队列三者有类似,都有回调函数注册,通知调用的设计,容易混淆。 简述和区别 观察者模式:被...

  • Laravel实现大型商城高性能消息队列

    〖课程介绍〗laravel支持消息队列,发短信,发送消息通知 用起来很方便,延时队列还可以用来方式晚上发短信骚扰用...

  • RxSwift 的那些事

    观察者模式 被观察者给观察者(订阅者)发送消息(通知), 观察者接收消息, 做相应的处理.比如妈妈照顾宝宝, 妈妈...

  • RxJava 再 "用力" 一点点

    RxJava 里面采用了观察者的设计模式,因此存在观察者与被观察者,被观察者发送消息通知观察者,观察者接收到消息更...

  • 读书笔记:浅谈观察者模式

    观察者模式是行为模式的一种,主要是用来进行消息的订阅和通知,一个观察者模式应该包括4个部分,抽象主题、主题的实现、...

  • 通知 NSnotification

    通知是使用观察者模式实现的用于跨层传递消息的机制 特点 观察者模式实现的 作用 进行跨层传递消息 在我们业务开发过...

  • iOS中通知实现观察者模式

    KVO与通知都可实现观察者模式。 一、通知简介 NSNotificationCenter是一个消息通知机制,类似广...

  • Laravel消息队列

    Laravel消息队列## 本文所讲的消息队列是基于Beanstalkd的,一些繁重的任务可以放到消息队列里,后台...

  • Observer模式

    观察者模式比较容易理解,就是当观察对象状态发生变化的时候,通知观察者。一个对象可以有多个观察者,所以通知的时候也会...

网友评论

    本文标题:laravel队列、消息通知和观察者模式的理解

    本文链接:https://www.haomeiwen.com/subject/yvyunftx.html