laravel8 模型监听之观察者监听事件 附带消息队列实现

思考 什么是模型监听? 为什么要使用模型监听

就相当于在执行模型操作的时候安装的一个小监控和一个小保安 当我们的监控到的时候让保安去执行一些操作 模型监听的出现是我们的代码变得高度解耦 还可以配合消息队列 可以解决在服务器高峰的时候暂缓一些任务 等高峰过去以后 帮我们执行一些操作 这里有个很好的例子就是我们的苹果手机支付 apple pay 他就是一个典型的例子 你在网上消费的钱他会晚一会进行扣款的操作

观察者监听模型事件

第一步 创建一个观察者

doc 命令创建一个观察者:

php artisan make:observer NoticeObserver -m Notice

默认生成的Noticeserver 会给你生成 created updated deleted restored(恢复) forceDeleted(强制删除)的空方法 根据他们的方法名你就不难看出他是什么时候执行监听的 如下图:

 注:批量更新时不会触发相应事件,因为是直接走查询构建器完成的,绕过了模型方法。

第二步:在我们的观察者类中写一个任务比如写日记

 第三步:如果我们想要他在那个模型中执行 我们需要在这个模型中注册一下

 因为他是继承的boot类  子类和父类重名的时候我们声明父类不然会被替换

例如我们刚才的任务是写在了created方法中 就说明这个任务是在添加完成以后执行

 

使用监听完成消息队列

消息队列流程图表

根据上图,首先创建消息管道,来存储任务  本次使用mysql表来当消息管道

创建容器数据表

php artisan queue:table   任务队列表
php artisan queue:failed-table  执行任务失败后,存储的表
php artisan migrate  执行迁移

注:在这里迁移的时候我们有时候报错原因是 我们配置文件database.php中的数据库格式是utf8mb4 我们修改为utf8 就可以执行迁移了 这里就是laravel的原因你直接更改数据库的字符集不管用

 

 创建任务

php artisan make:job xxx

创建完成的文件

 在我们刚才的观察者中添加一下这个任务

 当我们执行完成添加操作以后我们就可以在我们的表中看到我们待执行的任务了

 

 可是我们做完这一系列操作以后你会发现你并没有执行任务 这是因为我们没有人去消费他参考上图 他现在就相当于消息队列 一个一个待执行的任务在管道中排好队等你去执行 上面这个表就是你管道中现在的内容

消费管道中的任务

php artisan queue:work

当这串doc命令执行以后你会看到

 

这里就是已经开始消费了 完成以后你管道中的数据就会消失

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啥都不多头发多

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值