美文网首页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队列、消息通知和观察者模式的理解

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