php 队列 监听,laravel队列,事件简单使用方法

本文详细介绍了如何在Laravel中配置队列使用数据库或Redis,创建任务文件并执行,以及利用事件监听和订阅实现事件驱动编程。通过实例演示,了解如何处理任务异步执行和事件触发,提升应用性能和可扩展性。
摘要由CSDN通过智能技术生成

A.队列的使用

1.队列配置文件存储在 config/queue.php 根据自己的情况进行配置

2..env文件 QUEUE_DRIVER=database(根据个人情况配置,redis等)

3.创建jobs表(不用数据库的可以不用建表)

php artisan queue:table

php artisan migrate

4.创建任务文件

php artisan make:job Testqueue

会生成目录和文件appJobsTestqueue.php

namespace AppJobs;useIlluminateBusQueueable;useIlluminateQueueSerializesModels;useIlluminateQueueInteractsWithQueue;useIlluminateContractsQueueShouldQueue;useIlluminateFoundationBusDispatchable;useIlluminateSupportFacadesDB;class testqueue implementsShouldQueue

{use Dispatchable, InteractsWithQueue, Queueable,SerializesModels;/**

* Create a new job instance.

*

* @return void*/

public function__construct()

{//}/**

* Execute the job.

*

* @return void*/

public functionhandle()//handler里就是写业务逻辑的地方了,这里可以用type-hint依赖注入的方式,注入任何你需要的类。

{// DB::table('tests')->insert(['name'=>'测试名字']);//这里是自己写代码

}

5.自己建一个控制器

里面写代码

public function login(Request $request){

$this->dispatch(new testqueue());

访问此控制器后,在jobs中会有一条队列的记录

启动队列

php artisan queue:work

会把jobs表中数据删除 在tests表中增加一条记录

B.事件的使用

Laravel 的事件提供了一个简单的观察者实现,能够订阅和监听应用中发生的各种事件。事件类保存在 app/Events 目录中,而这些事件的的监听器则被保存在 app/Listeners 目录下。这些目录只有当你使用 Artisan 命令来生成事件和监听器时才会被自动创建。

注册事件和监听器

Laravel 应用中的 EventServiceProvider 有个 listen 数组包含所有的事件(键)以及事件对应的监听器(值)来注册所有的事件监听器,可以灵活地根据需求来添加事件。例如,让我们增加一个 OrderShipped 事件:

/**

* 应用程序的事件监听器映射。

*

* @var array

*/

protected $listen = [

'AppEventsOrderShipped' => [

'AppListenersSendShipmentNotification',

],

];

生成事件 & 监听器

php artisan event:generate

会生成AppEvents目录和OrderShipped.php

同时生成AppListenersSendShipmentNotification.php

手动注册事件

事件通常是在 EventServiceProvider 类的 $listen 数组中注册,但是,你也可以在 EventServiceProvider 类的 boot 方法中注册基于事件的闭包:

/**

* 注册应用程序中的任何其它事件。

*

* @return void

*/

public function boot()

{

parent::boot();

Event::listen('event.name', function ($foo, $bar) {

//

});

}

通配符事件监听器

你可以在注册监听器时使用 * 通配符参数,这样能够在同一个监听器上捕获多个事件。通配符监听器接受事件名称作为其第一个参数,并将整个事件数据数组作为其第二个参数:

Event::listen('event.*', function ($eventName, array $data) {

//

});

其他操作同队列一样

C.

事件订阅(Event Subscribers)

Event Subscribers是一种特殊的Listener,前面讲的是一个listener里只能放一个hander(),事件订阅可以把很多处理器(handler)放到一个类里面,然后用一个listner把它们集合起来,这样不同的事件只要对应一个listner就可以了。

namespace AppListeners;classUserEventListener

{/**

* Handle user login events.*/

public function onUserLogin($event) {}/**

* Handle user logout events.*/

public function onUserLogout($event) {}/**

* Register the listeners for the subscriber.

*

* @param IlluminateEventsDispatcher $events

* @return array*/

public function subscribe($events)

{$events->listen('AppEventsUserLoggedIn',

'AppListenersUserEventListener@onUserLogin');$events->listen('AppEventsUserLoggedOut',

'AppListenersUserEventListener@onUserLogout');

}

}

看后面的subscribe(),每个事件和处理器是一一对应的。

绑定 Event Subscriber到Service Provider

namespace AppProviders;use IlluminateContractsEventsDispatcher asDispatcherContract;use IlluminateFoundationSupportProvidersEventServiceProvider asServiceProvider;class EventServiceProvider extendsServiceProvider

{/**

* The event listener mappings for the application.

*

* @var array*/

protected $listen =[//];/**

* The subscriber classes to register.

*

* @var array*/

protected $subscribe =['AppListenersUserEventListener',];

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值