2017 © Pedro Peláez
 

yii2-extension yii2-rabbitmq

通过rabbit 创建消费者,生产者

image

shenboran/yii2-rabbitmq

通过rabbit 创建消费者,生产者

  • Friday, December 8, 2017
  • by shenboran
  • Repository
  • 1 Watchers
  • 1 Stars
  • 14 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 1 Versions
  • 17 % Grown

The README.md

yii2-rabittmq

非常方便使用rabbitMQ队列(其实只要amqp支持的都可以),使用yii2框架, (*1)

使用前

  • php7
  • 安装amqp扩展

安装

在项目文件composer.json 中加入, (*2)

"require" : {
        ....
        "shenboran/yii2-rabbitmq" : "dev-master"
    },

设置rabbitMQ服务配置信息

在params.php 文件中申明地址, (*3)

    'rabbitMQ' => [
        'host' => "127.0.0.1",
        'port' => '5672',
        'login' >= 'guest',
        'password' => "guest",
        'vhost' => "/"
    ]

实现自己队列服务层

  • 新建文件 SMSQueue.php
<?php
namespace common\component\queue;

use common\utils\SmsUtil;
use shenboran\rabbitmq\RabbitQueue;

class SMSQueue extends RabbitQueue 
{

    /**
     * 交换机名称  定义自己的交换机
     * 
     * @var string
     */
    protected $_exchangeName = 'exchange'; 

    /**
     * 队列名称
     *
     * @var string 定义你自己的队列名称
     */
    protected $_queueName = 'q_sim';

    /**
     * 路由 
     *
     * @var string  定义你自己的路由名称
     */
    protected $_routeKey = 'sendmsg';

    /**
     * 路由 
     *
     * @var string  定义你自己的交换机的转发类型 默认是AMQP_EX_TYPE_DIRECT
     */
    protected $_exchangeType = AMQP_EX_TYPE_DIRECT;



    public function __construct()
    {
        parent::__construct();
    }

    /**
     * 实现抽象方法 
     * 用来处理队列元素的 逻辑
     */
    public function proccess($envelope, $queue)
    {

        $msg = $envelope->getBody();
        $result = json_decode($msg, true); //获取队列元素信息
        if (YII_ENV_PROD) { // 真实环境采取发送短信
            $result = SmsUtil::sendCode($result['m'], $result['v']);//自己的业务逻辑
            if ($result) { 
                $queue->ack($envelope->getDeliveryTag());//手动发送ack 确认队列中的元素已经消耗掉了
            }else{
                    //发送失败的逻辑 
            }
        } else {
            $queue->ack($envelope->getDeliveryTag());//手动发送ack 确认队列中的元素已经消耗掉了
        }
    }
}

注册你的入列compotent

在main.php 中注册下你的队列服务层, (*4)


<?php return [ 'components' => [ 'smsQueue' => [ 'class' => 'common\component\queue\SMSQueue' //一个用于发送短信的队列 ], 'wechatPMPQueue' => [ 'class' => 'common\component\queue\WechatPMPQueue' //一个用于发送微信模板推送的队列 ] ] ];

发送入队信息


//支持 数组 和字符串 其实最后都转化成字符串了 $data=['m'=>'13888888888','v'=>'1234']; \Yii::$app->smsQueue->public($data); \Yii::$app->wechatPMPQueue->public($data);

消耗队列消息


// 默认情况下 不会自动确认队列元素是否消耗掉(推荐) \Yii::$app->smsQueue->consume(); // 自动发送ack 用来消耗队列中的元素 \Yii::$app->smsQueue->consume(true);

The Versions

08/12 2017

dev-master

9999999-dev

通过rabbit 创建消费者,生产者

  Sources   Download

Apache-2.0

The Requires

 

by 沈博然

extension yii2