当前位置:   article > 正文

Yii实现RabbitMQ队列

Yii实现RabbitMQ队列

一:拓展安装

  1. composer require yiisoft/yii2-queue
  2. composer require enqueue/amqp-lib

2:RabbitMQ队列配置

配置文件中配置RabbitMQ队列

  1. 'components' => [
  2. ...
  3. 'queue' => [
  4. 'class' => yii\queue\amqp_interop\Queue::class,
  5. 'host' => '192.168.6.88',//host
  6. 'port' => '5672',//端口
  7. 'user' => 'admin',//账号
  8. 'password' => 'admin',//密码
  9. 'queueName' => 'queue',//队列名称
  10. 'ttr' => 300,//任务处理最长时间(秒)
  11. 'attempts' => 3,//任务最大尝试次数
  12. ],
  13. ...
  14. ]

在配置文件的bootstrap属性增加queue

  1. 'bootstrap' => [
  2. ...
  3. 'queue',
  4. ...
  5. ],

3:发送队列任务

  1. Yii::$app->queue->push(new TestJobs([
  2. 'message' => 'hello world'
  3. ]));

4:接收并处理队列任务

  1. <?php
  2. namespace console\jobs;
  3. use Yii;
  4. use yii\base\BaseObject;
  5. use yii\queue\JobInterface;
  6. class TestJobs extends BaseObject implements JobInterface
  7. {
  8. public $message;
  9. public function execute($queue)
  10. {
  11. var_dump($this->message);
  12. return true;
  13. }
  14. }

如果我们需要在执行队列任务时只有执行成功才删除对应的任务,否则不删除处理

  1. <?php
  2. namespace console\jobs;
  3. use Yii;
  4. use yii\base\BaseObject;
  5. use yii\queue\RetryableJobInterface;
  6. class TestJobs extends BaseObject implements RetryableJobInterface
  7. {
  8. public $message;
  9. public function execute($queue)
  10. {
  11. if ($this->message == 'hello world') {
  12. return true;
  13. }
  14. return false;
  15. }
  16. /**
  17. * 任务处理最长时间(秒)
  18. */
  19. public function getTtr()
  20. {
  21. return 300;
  22. }
  23. /**
  24. * 失败后是否需要执行
  25. * 返回true表示失败后需要重新执行
  26. */
  27. public function canRetry($attempt, $error)
  28. {
  29. return true;
  30. }
  31. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/246377
推荐阅读
  

闽ICP备14008679号