laravel任务中间件是怎么实现的,事件监听器能否使用中间件? 求大佬解答

看了事件监听器也是实现ShouldQueue接口就可以发送队列,那是不是也可以像任务队列一样可以添加中间件。
任务代码

namespace App\Jobs;

use App\Http\Middleware\RateLimited;

class ConsumeMessage implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;


    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct()
    {
    }

    /**
     * Execute the job
     * @return void
     */
    public function handle()
    {
        //handle 
    }

    public function middleware()
    {
        return [new RateLimited()];
    }
}

事件监听器代码

namespace App\Listeners;

use App\Events\BlogView;
use App\Http\Middleware\RateLimited;
use Illuminate\Contracts\Queue\ShouldQueue;


class BlogViewListener implements ShouldQueue
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {

    }

    /**
     * Handle the event.
     *
     * @param  BlogView  $event
     * @return void
     */
    public function handle(BlogView $event)
    {
        echo date('Y-m-d H:i:s') . "队列处理 ". $event->event_data['id'] .PHP_EOL;
    }

    public function middleware()
    {
        return [new RateLimited()];
    }
}
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 2

夭寿啊,发送队列还限流,支不支持你去源码看一下,并没有对于中间件的描述

可以看这个:队列《Laravel 8 中文文档》

3年前 评论

@Imuyu 感谢你的回答,可能我这个问题的表述不是很正确,刚接触laravel不久很多东西不是很懂。我这里并不是在队列发送的时候限流,而是官方文档里的一个任务中间件的例子,任务类里 middleware() 添加 RateLimit 中间件,实现任务消耗的时候限流,比如每10s执行一个任务。

3年前 评论

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