PHP队列服务HTTPSQS的安装和使用实例

HTTPSQS(HTTP Simple Queue Service)是一个基于HTTP GET/POST请求的简单队列服务。

PHP队列服务HTTPSQS的安装和使用

队列(Queue)又称先进先出表(First In First Out),即先进入队列的元素,先从队列中取出。加入元素的一头叫“队头”,取出元素的一头叫“队尾”。利用消息队列可以很好地异步处理数据传送和存储, 当你频繁地向数据库中插入数据、频繁地向搜索引擎提交数据,就可采取消息队列来异步插入。另外,还可以将较慢的处理逻辑、有并发数量限制的处理逻辑,通过消息队列放在后台处理,例如FLV视频转换、发送手机短信、发送电子邮件等,也就是实现异步请求。

HTTPSQS 具有以下特征:

● 非常简单,基于 HTTP GET/POST 协议。PHP、Java、Perl、Shell、Python、Ruby等支持HTTP协议的编程语言均可调用。
● 非常快速,入队列、出队列速度超过10000次/秒。
● 高并发,支持上万的并发连接,C10K不成问题。
● 支持多队列。
● 单个队列支持的最大队列数量高达10亿条。
● 低内存消耗,海量数据存储,存储几十GB的数据只需不到100MB的物理内存缓冲区。
● 可以在不停止服务的情况下便捷地修改单个队列的最大队列数量。
● 可以实时查看队列状态(入队列位置、出队列位置、未读队列数量、最大队列数量)。
● 可以查看指定队列ID(队列点)的内容,包括未出、已出的队列内容。
● 查看队列内容时,支持多字符集编码。
● 源代码不超过800行,适合二次开发。

HTTPSQS使用示例:

//生成对账单
public function create_dzd()
{
    $sl_id = I('get.sl_id','','intval');
    $sl_uid = I('get.sl_uid','','intval');
 
    $this->send_task->startTrans();//开启事务
 
    $data['st_params'] = $sl_id;
    $data['st_seller_id'] = $sl_uid;
    $data['st_type'] = 3;
    $data['st_add_time'] = time();
    $data['st_success'] = 1;//1后台生成对账单
    $data['st_is_compelete'] = 0;
    $data['st_ip'] = get_client_ip(1);
    $id = $this->send_task->add($data);
    if($id){
        $httpsqs = $this->getHttpsqs();
        $name = self::EXPORT_RECORD;
        $rs = $httpsqs->put($name, $id);
        if($rs){
            $this->send_task->commit();
            $this->ajaxReturn(array('code'=>0, 'msg'=>'已经开始生成!'));
        }else{
            $this->send_task->rollback();
            $this->ajaxReturn(array('code'=>2, 'msg'=>'生成对账单失败'));
        }
    }else{
        $this->ajaxReturn(array('code'=>3, 'msg'=>'生成对账单失败'));
    }
}

这就是一个队列的应用,生成对账单,入队列,同时把记录写入到一张表记录。另一个java脚本读取队列,进行处理,更新记录。

HTTPSQS封装在一个类中,调用的时候这样调用:

//初始化队列服务
private function getHttpsqs()
{
    import("COM.Httpsqs");
    $httpsqs = new Httpsqs("192.168.1.8", 1218, "dafadsfasfsadfsa", 'utf-8');
    return $httpsqs;
}
但是要使用HTTPSQS,必须有一台队列服务器,这个服务器装了队列服务。

以上初始化队列,也指定了ip,端口,来连接队列服务器,才能进行队列的操作。

HTTPSQS服务器端安装方法:

ulimit -SHn 65535
 
wget http://httpsqs.googlecode.com/files/libevent-2.0.12-stable.tar.gz
tar zxvf libevent-2.0.12-stable.tar.gz
cd libevent-2.0.12-stable/
./configure --prefix=/usr/local/libevent-2.0.12-stable/
make
make install
cd ../
 
wget http://httpsqs.googlecode.com/files/tokyocabinet-1.4.47.tar.gz
tar zxvf tokyocabinet-1.4.47.tar.gz
cd tokyocabinet-1.4.47/
./configure --prefix=/usr/local/tokyocabinet-1.4.47/
#注:在32位Linux操作系统上编译Tokyo cabinet,请使用./configure --enable-off64代替./configure,可以使数据库文件突破2GB的限制。
#./configure --enable-off64 --prefix=/usr/local/tokyocabinet-1.4.47/
make
make install
cd ../
 
wget http://httpsqs.googlecode.com/files/httpsqs-1.7.tar.gz
tar zxvf httpsqs-1.7.tar.gz
cd httpsqs-1.7/
make
make install
cd ../
更具体的服务器端HTTPSQS队列服务的安装和编译,参考:https://code.google.com/p/httpsqs/

时间: 2024-07-30 14:19:16

PHP队列服务HTTPSQS的安装和使用实例的相关文章

流行消息队列服务

一.简单消息队列服务 HTTPSQS HTTPSQS(HTTP Simple Queue Service)是一款基于 HTTP GET/POST 协议的轻量级开源简单消息队列服务,使用 Tokyo Cabinet 的 B+Tree Key/Value 数据库来做数据的持久化存储. 队列(Queue)又称先进先出表(First In First Out),即先进入队列的元素,先从队列中取出.加入元素的一头叫"队头",取出元素的一头叫"队尾".利用消息队列可以很好地异步

Laravel 4.2 中队列服务(queue)使用感受_php实例

这半个月,我参与重写了一个微信公众号后端系统,首次使用了laravel 4.2,以及laravel引以为傲的队列服务(queue). 由于整个系统涉及到多端交互,又有大量语音传输.处理的业务,我们在一些地方发现响应时间过长.之前的系统基于node.js和mongoDB,由于node天生就是异步,有守护进程,所以并没有出现过这个问题,而这次重写必然要引入异步流程了.Queue进入了我们的视线. 根据这一页几乎还全是英文的"中文文档" ,laravel恰好在4.2版本中刚刚引入了redis

WCF服务编程设计规范(6):队列服务、安全和服务总线

WCF服务编程设计规范(6):队列服务.安全和服务总线.本节整理队列服务(Queue Servuce).服务安全(Service Security)和服务总线(Service Bus)的设计规范. Queued Services 队列服务 1. On the client, always verify that the queue (and a dead-letter queue, when applicable) is available before calling the queued s

win764位旗舰版开启PrintSpooler服务解决不能安装打印机故障

在win764位旗舰版用户使用操作系统的过程中,会遇上一些故障,如标题所说的在win7系统下打印机无法安装的问题,而PrintSpooler服务对打印机安装至关重要,如果该服务没有开启,我们是不能安装打印机设备的,那么下面小编就分享一下打开PrintSpooler服务的方法. 具体操作步骤: 1.点击wn7旗舰版系统的开始菜单,选择"运行",然后在对话框中输入"services.msc",并回车; 2.打开Win7系统的服务列表后,我们在右侧窗口中寻找 PrintS

使用systemd管理Yii2(或其他)队列服务,实现故障重启、开机自启动等功能

以Centos7为例,在 /usr/lib/systemd/system 目录新建 queue.service 文件 [Unit] Description=Yii Queue Server After=network.target After=syslog.target [Service] Type=forking PIDFile=/var/run/www-yii-queue.pid ExecStart=/home/www/yii queue/listen --verbose=1 --color

消息队列服务(MQS)技术浅析

1    MQS简介          消息队列服务(Message Queue Service,简称MQS),是阿里云推出的分布式消息中间件服务.          MQS旨在提供可靠.海量.高并发的分布式消息队列服务,从而帮助应用开发者实现应用之间以及应用内部各组件之间的消息传递,解耦系统之间的依赖. 2    MQS功能特点          消息队列最早出现在操作系统中,解决了传统的进程通信模式中存在的很多弊端.消息队列具备的优点包括: (1)     单独对消息的收.发进行管理,确保消

《WCF服务编程》关于“队列服务”一个值得商榷的地方

今天写<WCF技术剖析(卷2)>关于"队列服务"部分,看了<WCF服务编程>相关的内容.里面介绍一个关于"终结点不能共享相同的消息队列"说法,个人觉得这值得商榷.撰写此文,希望对此征求大家的意见.[源代码从这里下载] 目录 一."终结点不能共享相同的消息队列" 二.实践出真知 三.为什么同一个服务的终结点可以共享相同的消息队列 四.为什么不同服务的终结点不能共享相同的终结点 一."终结点不能共享相同的消息队列&q

云服务厂商都在推荐轻量级的存储队列服务,用来取代原有的比较重的消息队列服务

这个小玩意源于上周在研究Azure的时候,发现云服务厂商都在推荐轻量级的存储队列服务,用来取代原有的比较重的消息队列服务,具体来说,比如阿里云就推荐使用消息服务替代消息队列,在Azure中,就有一个轻量级的存储队列(Storage Queue)可以替代服务总线(Service Bus), 简单试用了一下Azure的Storage Queue后,发现这玩意很好用,于是决定全面的深入研究一下,再将公司电商系统内的相关任务处理均重构成使用存储队列服务,而深入研究得找个案例呀,于是就想到了做个分布式爬虫

阿里云云消息队列服务稳定吗

问题描述 在阿里云论坛上看到一个帖子,http://bbs.aliyun.com/read.php?tid=145878,发现阿里云推出来云消息服务队列,加入群拿到文档,简单试用了一下,貌似跟aws的消息队列服务很像,不知道稳定性怎么样,有谁试用过吗? 解决方案 本帖最后由 zjliwenzhao 于 2013-09-11 13:29:25 编辑解决方案二:没有人用过吗?解决方案三:没有人用过吗?