dscw1223 2019-03-22 20:16 采纳率: 50%
浏览 81

Laravel - 事件订阅者入队 - 当订阅者方法属于不同类时

Hello Good Developers,

I've tried using solution from This Question but it didn't solve my problem hence I am asking it as a separate question.

TL;DR - I want my subscriber Listeners to get executed in a queue asynchronously. My Subscriber calls method from different class on for each Event. I tried to add implements ShouldQueue in my SubscriberClass | My Listener Class | renamed method to handle in Each Class but nothing works. they are still executed synchronously without queue.

I've a Event Subscriber Class: TesterAPI. I added it in EventServiceProvider subscribe array.

I've an Event Class SourceAPIEvents

class SourceAPIEvents
{
    const PROJECT_CREATED = 'project.created';
    const PROJECT_PAUSED = 'project.paused';
    const PROJECT_RESUME = 'project.resume';
    const PROJECT_CLOSED = 'project.closed';

    public $project;
    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct(Project $project)
    {
        $this->project = $project;
    }
}

TesterAPI - Subscriber

class TesterAPI implements ShouldQueue
{

    /**
     * Register the listeners for the subscriber.
     *
     * @param \Illuminate\Events\Dispatcher $events
     */
    public function subscribe($events)
    {
        $events->listen(
            SourceAPIEvents::PROJECT_CREATED,
            'App\Listeners\Internal\Project\SourceAPI\Tester\ProjectCreate@handle'
        );

        $events->listen(
            SourceAPIEvents::PROJECT_RESUME,
            'App\Listeners\Internal\Project\SourceAPI\Tester\ProjectResume@handle'
        );

        $events->listen(
            SourceAPIEvents::PROJECT_PAUSED,
            'App\Listeners\Internal\Project\SourceAPI\Tester\ProjectPause@handle'
        );

        $events->listen(
            SourceAPIEvents::PROJECT_CLOSED,
            'App\Listeners\Internal\Project\SourceAPI\Tester\ProjectClose@handle'
        );
    }
}

Here are my Listener Classes:

class ProjectCreate extends TesterBase implements ShouldQueue
{
    public function handle(SourceAPIEvents $sourceAPIEvent)
    {
        //Do Something
    }

}

class ProjectPause extends TesterBase implements ShouldQueue
{
    public function handle(SourceAPIEvents $sourceAPIEvent)
    {
        //Do Something
    }

}

class ProjectResume extends TesterBase implements ShouldQueue
{
    public function handle(SourceAPIEvents $sourceAPIEvent)
    {
        //Do Something
    }

}

I am calling these events like this

event(SourceAPIEvents::PROJECT_CREATED, new SourceAPIEvents($project));

event(SourceAPIEvents::PROJECT_RESUME, new SourceAPIEvents($project));

Help me understand what I am doing wrong.

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
    • ¥20 怎么用dlib库的算法识别小麦病虫害
    • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
    • ¥15 java写代码遇到问题,求帮助
    • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
    • ¥15 有了解d3和topogram.js库的吗?有偿请教
    • ¥100 任意维数的K均值聚类
    • ¥15 stamps做sbas-insar,时序沉降图怎么画
    • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
    • ¥15 关于#Java#的问题,如何解决?