shenboran / yii2-rabbitmq
通过rabbit 创建消费者,生产者
Installs: 213
Dependents: 0
Suggesters: 0
Security: 0
Stars: 4
Watchers: 1
Forks: 0
Open Issues: 0
Type:yii2-extension
Requires
- php: ^7.0
- yiisoft/yii2: *
This package is not auto-updated.
Last update: 2025-04-09 11:39:42 UTC
README
非常方便使用rabbitMQ队列(其实只要amqp支持的都可以),使用yii2框架
使用前
- php7
- 安装amqp扩展
安装
在项目文件composer.json 中加入
"require" : {
....
"shenboran/yii2-rabbitmq" : "dev-master"
},
设置rabbitMQ服务配置信息
在params.php 文件中申明地址
'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 中注册下你的队列服务层
<?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);