使用队列发送短信

dev-master / 1.0.x-dev 2014-04-01 08:54 UTC

This package is not auto-updated.

Last update: 2024-09-24 06:31:38 UTC


README

#短信队列

##简介

通过队列方式发送短信,目前实现了使用redis作为队列。

已实现的第三方短信服务: 百悟漫道

发送短信方只需要将短信放入队列。队列分为主队列和副队列。
优先将消息放入主队列,如果主队列消息堆积,则将消息放入副队列。

两个队列对应两个消费者:主消费者和副消费者。

主消费者从主队列获取消息,尝试发送,如果失败则放入副队列,由副队列负责发送。

##使用方法

###创建消息、消息入队列

use Filix\SMS\Queue\RedisQueue;    
use Filix\SMS\Message\Message;    
use Filix\SMS\Producer\PrimaryProducer;    
use Filix\SMS\SmsService\BWService;    

$redis = new Redis();    
$redis->connect('127.0.0.1', 6379);    
//主队列
$primaryQueue = new RedisQueue($redis, 'PRIMARY_CHANNEL');   
//副队列
$secondaryQueue = new RedisQueue($redis, 'SECONDARY_CHANNEL');     

//创建sms
$message = new Message();
$message->setMobiles(array('13512345678', '13412345678'));
$message->setContent('Hello!');

//将百悟作为主服务
$service = new BWService($corp_id, $corp_pwd, $corp_service); 
//主生产者
$producer = new PrimaryProducer($service, $primaryQueue, $secondaryQueue);
//其实只是丢进主队列或副队列(主队列堆积时),并没有真正的发送
$producer->send($message);

###发送消息

创建主消费者脚本:

use Filix\SMS\Queue\RedisQueue;
use Filix\SMS\Customer\PrimaryCustomer;
use Filix\SMS\SmsService\BWService;

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$primaryQueue = new RedisQueue($redis, 'PRIMARY_CHANNEL');
$secondaryQueue = new RedisQueue($redis, 'SECONDARY_CHANNEL');
$service = new BWService($corp_id, $corp_pwd, $corp_service); 
$customer = new PrimaryCustomer($service, $primaryQueue, $secondaryQueue);

while(1){
    $result = $customer->fetchAndSend(3); //一次获取3条消息,并发地向服务商接口发送
    sleep(1);
}

##自定义

###自定义队列

实现Filix\Queue\QueueInterface接口即可,例如实现自己的Mysql队列、RabbitMQ队列等。

###自定义第三方短信服务商

实现Filix\SmsService\ServiceInterface接口即可。