PHP用ActiveMq 实现消息列队

1.各种安装
2.简单配置:

jetty.xml

localhost:8161

配置:

activemq添加stomp的61613接口

conf/activemq.xml

<transportConnector name="stomp+nio" uri="stomp+nio://0.0.0.0:61613?transport.closeAsync=false"/>
3.创建消息列队
<?php
$queue = "/queue/userReg"; try {
$stomp = new Stomp('tcp://127.0.0.1:61613');
} catch (StompException $e) {
die('Connection failed: ' . $e->getMessage());
} $obj = new Stdclass();
$obj->username = 'smartom';
$obj->password = '123';
$obj->status = 1;
$stomp->send('/queue/userReg', json_encode($obj));
4.销毁消息列队
<?php
$queue = "/queue/userReg"; try {
$stomp = new Stomp('tcp://127.0.0.1:61613');
} catch (StompException $e) {
die('Connection failed: ' . $e->getMessage());
} $isSubscribe = $stomp->subscribe($queue); //订阅 while ($stomp->hasFrame()) { //循环读取队列
$frame = $stomp->readFrame(); //读取下一个
$user = json_decode($frame->body);
/*
处理消息
*/
if($user->status=1){
$user->status=2;
$stomp->send('/queue/sendVerify', $frame->body); //发送下一个
$stomp->ack($frame); //销毁列队
} sleep(3); }

5.开启事务

$queue1 = "/queue/userReg";
$queue2 = "/queue/sendMsg";
$stomp->begin("news");
if($stomp->send($queue1,json_encode($mainSite), array('transaction' => 'news')) && $stomp->send($queue2,json_encode($searchIndex) , array('transaction' => 'news')) )//发布到主站消息
{
$stomp->commit("news");
}

6.topic多个订阅者

queue是单个订阅者

$broker = 'tcp://192.168.222.129:61613';
$queue = "/topic/order_create";

7.集群配置

8.共享文件系统

使用共享系统来做 Master/slave集群

9.共享数据库方式

所有消息读写其实都是数据库操作,性能完全取代与数据库的性能。

10.基于zookeeper 的主从(levelDB Master/Slave)

基于zookeeper 来选举出一个master ,其他节点自动作为slave实时同步消息.

安装相应工具

yum -y install nfs-utils rpcbind

nfs(network file system) 网络文件系统

rpcbind 是一个RPC服务,主要是在nfs 共享时负责通知客户端,服务器的nfs端口号

上一篇:Core Animation 文档翻译 (第二篇)


下一篇:QT 焦点事件(4种方式的解释,还有委托焦点)