Laravel 的事件广播相和队列之间的联系(event 和 job)

问题:最近由于业务需要,需要用到定时轮询,所以准备使用laravel中的事件广播。在阅读文档的过程中存在几点疑惑,希望各位大佬赐教。

1.事件广播和队列之间的联系?

我理解的事件广播是某个事件被触发后,会自动发送到指定的频道去。官方文档上说所有的事件广播都是通过队列任务来完成的,这个流程具体是什么?
2.队列
我理解的队列,是将任务分发到队列中,在进行处理。这个任务(job)和事件(event)两者是同一个概念嘛?

3.广播是通过事件来触发的,比如当数据库有新增数据的时候就触发,那是不是意味者我需要实时监控数据库的变化?如果这样的话还是要定时去数据库查询,这和前台采用ajax轮询岂不是一样?

以上是我的一些疑问,理解的不到位的地方希望各位能多多指点,感激不尽~

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
pardon110
最佳答案

首先明确队列通常是用来处理延迟任务的,事件广播说白点就是业务处理逻辑通知。从某种意义上来说,事件广播是一个执行动作。所以如果你的广播逻辑,并不需要立即执行的话,即有异步的需求。可以将事件广播做成任务,分发到队列中。任务是一段处理逻辑,而事件是一个切面点,即是一个时间的触发点,本质上就是一个钩子。如果用炸弹来形容,后者相当于引线,前者类似于爆炸装置。用单一函数表示,一个函数定义就是一个任务,一个带条件的函数调用,就是事件触发了。即定义与执行分开了。所以准确来讲是这样:消费队列->任务->事件->广播 ,而你所做的仅只是将埋有引线的任务,加到队列(任务分发到队列)中去了。它从始至终都没有进行过真正的处理,只是在你消费队列时,由容器帮你执行。

5年前 评论
讨论数量: 1
pardon110

首先明确队列通常是用来处理延迟任务的,事件广播说白点就是业务处理逻辑通知。从某种意义上来说,事件广播是一个执行动作。所以如果你的广播逻辑,并不需要立即执行的话,即有异步的需求。可以将事件广播做成任务,分发到队列中。任务是一段处理逻辑,而事件是一个切面点,即是一个时间的触发点,本质上就是一个钩子。如果用炸弹来形容,后者相当于引线,前者类似于爆炸装置。用单一函数表示,一个函数定义就是一个任务,一个带条件的函数调用,就是事件触发了。即定义与执行分开了。所以准确来讲是这样:消费队列->任务->事件->广播 ,而你所做的仅只是将埋有引线的任务,加到队列(任务分发到队列)中去了。它从始至终都没有进行过真正的处理,只是在你消费队列时,由容器帮你执行。

5年前 评论
pardon110

首先明确队列通常是用来处理延迟任务的,事件广播说白点就是业务处理逻辑通知。从某种意义上来说,事件广播是一个执行动作。所以如果你的广播逻辑,并不需要立即执行的话,即有异步的需求。可以将事件广播做成任务,分发到队列中。任务是一段处理逻辑,而事件是一个切面点,即是一个时间的触发点,本质上就是一个钩子。如果用炸弹来形容,后者相当于引线,前者类似于爆炸装置。用单一函数表示,一个函数定义就是一个任务,一个带条件的函数调用,就是事件触发了。即定义与执行分开了。所以准确来讲是这样:消费队列->任务->事件->广播 ,而你所做的仅只是将埋有引线的任务,加到队列(任务分发到队列)中去了。它从始至终都没有进行过真正的处理,只是在你消费队列时,由容器帮你执行。

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!