排队的作业显示已完成,但未执行事件侦听器的方法

时间:2018-10-24 10:36:45

标签: cakephp queue cakephp-3.0

我正在使用CakePHP(3.6)事件在某个操作上发送电子邮件。并希望使用队列执行不同的操作。 为此,我已经集成了Queuesadilla插件,并使用了 MysqlEngine

大多数情况下,我一直关注此博客https://someguyjeremy.com/2017/07/queued-events-in-cakephp.html

我已经通过执行此命令启动了工作程序。

  

$ bin / cake queuesadilla

事件已排队并在一定时间后清除(假定延迟为10秒)。但是本应在分派后调用的方法没有被调用。 但它说

  

成功。确认队列中的作业

我有一个单独的侦听器。

namespace App\Event;
use Cake\Event\EventListenerInterface;
use Cake\Log\Log;
use App\Queue\QueueManager;

class TestListener implements EventListenerInterface
{
    public function implementedEvents()
    {
        Log::write("debug","inside listener");

        return [
            'Controller.Reports.afterRemove' => 'afterRemove',
        ];

    }

    public function afterRemove($event)
    {

        Log::write('debug', "Test listener has been fired");
    }
}

我不明白为什么未调用 afterRemove()方法? 我想通过这种方法发送电子邮件,但看起来好像没有被调用!

这就是我将工作入队的方式

 $test = [
             1=>"Test message"
         ];
          $event = new Event('Controller.Reports.afterRemove', null,$test);

          QueueManager::queue($event, [
              'delay' => 10
          ]);

这是我如何使听众具有全局性的

 use App\Event\TestListener; 
 use Josegonzalez\CakeQueuesadilla\Queue\Queue; 
 Configure::load('queuesadilla', 'default', false); 

 Queue::setConfig(Configure::consume('Queuesadilla'));
 $testListener =new TestListener();
 EventManager::instance()->on($testListener);

我想念什么吗?帮助将不胜感激。谢谢!

0 个答案:

没有答案