Laravel使用中的Broadcasting Events事件和Queues队列

Posted RM数据工作室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel使用中的Broadcasting Events事件和Queues队列相关的知识,希望对你有一定的参考价值。


今天来简单的聊聊Laravel中的Broadcasting Events事件和Queues队列的关系。


Broadcasting Events 顾名思义就是广播事件的意思,不确定事件的接收方是谁。一般的应用场景为:系统之间的相互发现。


系统发现的场景:


当你的新系统上线时,如何快速自动对接到调度、或者核心系统中,一般新系统上线得与核心系统,监控系统写入各种配置文件,用于系统间的交互。


而 broadcasting Events可以让这个过程简化,不用再写那么多配置文件。 新系统上线时通过 broadcasting广播出新系统的消息,核心系统或监控系统就会收到该系统广播的消息,调度或者监控中心收到消息就能确认该系统已经处于良好运行状态。可以进行下一步流程  操控指令发给该子系统。类似于动态分配IP 端口路由什么的都能在该交互过程中完成分配。完全可以通过广播消息,和监听消息来实现。就不用满处写配置文件了。

 

或者说在这种场景下也可以用到 Broadcasting:

在微信系统中需要微信server 与腾讯打交道 ,得到用户数据列如头像 昵称 openid 等等基础信息。 但其他系统用户中心并不是后做的微信server用户中心,这个时候就需要微信server得到这些基础数据后通过 Broadcasting 广播到其他需要数据的cms系统 或者 互动系统内 或者认证系统之类。


还可以发散场景:


在一直播互动过程中  需要定时晚六点才能接入微信互动数据,需要一个计划任务,或者延时任务,在保持原有系统架构不变情况下 加入微信互动数据,微信server端就可以应用到广播事件用队列 redis 处理该过程。由大屏展示的结果数据是内部生产系统提供接受接口服务的系统完成 ,仅把接收到的数据呈现出来就行。 并不需要微信server端去定时开启或关闭网口 ,从而保持用户参与的友好体验。

 

Broadcasting Events 的laravel配置文件config/broadcasting.php中,default驱动建议设置为redis。这样就可以利用redis的publish 和 subsribe命令来完成对时间的广播处理。

详情请参考:https://laravel.com/docs/5.2/events#broadcasting-events

Laravel使用中的Broadcasting Events事件和Queues队列
Broadcasting Events 在Laravel系统中,都是由Queues队列代为实现的。就是实际上每次Broadcasting Events广播事件的触发,就是给Queues队列新增了一条任务。然后使用执行Queues队列任务的命令 php artisan queue:work 来完成广播事件的发送。




Queues队列的laravel配置文件config/queue.php中,如果default驱动的配置为sync。那么意味着队列中的任务立即/同步执行(这时就不需要执行php artisan queue:work);如果设置为其他比如database,redis,beanstalkd那就需要通过执行php artisan queue:work来让队列中的任务真正跑起来;同时Laravel也支持亚马逊云的sqs,只要你再亚马逊云上开通了这个服务,那就修改config/queue.php中sqs节点的信息,然后把default驱动改为sqs,剩下的事就交给程序了。


php artisan queue:work这个命令如果一直手动来执行,那么队列就失去意义了。这里Laravel官方给了一个Supervisor的进程管理程序,通过安装和配置就能实现php artisan queue:work 的自动执行。

参考:https://laravel.com/docs/5.2/queues#supervisor-configuration

 

在linux中,如果想让它在后台执行: nohup php artisan queue: work &  (如需终止队列监听,需杀掉队列监听的进程)

 

好了大概的聊了一下  Broadcasting Events事件和Queues队列的关系,希望大家喜欢。具体场景中很实用的哦 。


以上是关于Laravel使用中的Broadcasting Events事件和Queues队列的主要内容,如果未能解决你的问题,请参考以下文章

Laravel pusher,/broadcasting/auth:1 加载资源失败:服务器响应状态为 500(内部服务器错误)

[李景山php]每天laravel-20160901|Dispatcher-1

Laravel Echo Listener 无法在前端工作

Numpy中的广播(Broadcasting)

一文带你理解NumPy中的Broadcasting广播机制

laravel5.5事件广播系统