本文目录一览:
php rabbitmq 哪个扩展最好
Linux 上面一般需要自己编译
注意:扩展是C写的,由于C与RabbitMQ通信一般需要依赖rabbitmq-c库(也就是librabbitmq),所以编译扩展前需要先装依赖库。不同版本的扩展,对php版本和librabbitmq兼容性不一样。下面这个版本是经过本人测试的,可以兼容的。
rabbitmq-c -0.4.1 , amqp 扩展 1.4.0 , php 5.5.9
一键安装脚本:
[cpp] view plain copy
#!/bin/bash
set -e
#install cmake
yum -y install cmake
#download rabbitmq-c
wget
php的amqp应该怎样使用
高级消息队列协议(AMQP)是一个异步消息传递所使用的应用层协议规范。作为线路层协议,而不是API(例如JMS),AMQP 客户端能够无视消息的来源任意发送和接受信息。现在,已经有相当一部分不同平台的服务器和客户端可以投入使用。
1、相关概念说明
Broker:简单来说就是消息队列服务器实体。
Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。
Queue:消息队列载体,每个消息都会被投入到一个或多个队列。
Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。
Routing Key:路由关键字,exchange根据这个关键字进行消息投递。
vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。
producer:消息生产者,就是投递消息的程序。
consumer:消息消费者,就是接受消息的程序。
channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。
2、使用流程
即 Client - AMQP server - Client
左边的Client向右边的Client发送消息,流程:
1, 获取Conection
2, 获取Channel
3, 定义Exchange,Queue
4, 使用一个RoutingKey将Queue Binding到一个Exchange上
5, 通过指定一个Exchange和一个RoutingKey来将消息发送到对应的Queue上,
6, 接收方在接收时也是获取connection,接着获取channel,然后指定一个Queue直接到它关心的Queue上取消息,它对Exchange,RoutingKey及如何binding都不关心,到对应的Queue上去取消息就OK了
3、AMQP例子
生产方
?php
$conn_args = array('host' ='localhost', 'port' = 5672, 'login' = 'guest', 'password' = 'guest', 'vhost' = '/');
$conn = new AMQPConnection($conn_args);
if ($conn-connect()) {
echo "Established a connection to the broker \n";
}else {
echo "Cannot connect to the broker \n ";
}
$e_name='ex_test5';//交换机名横
$q_name='q_test5';//队列名称
$r_key='key_test1';
//你的消息
$message = json_encode(array('Hello World!'));
//创建channel
$channel = new AMQPChannel($conn);
//创建exchange
$ex = new AMQPExchange($channel);
$ex-setName($e_name);//创建名字
$ex-setType(AMQP_EX_TYPE_DIRECT);
$ex-setFlags(AMQP_DURABLE | AMQP_AUTODELETE);
echo "exchange status:".$ex-declare();
echo "\n";
//创建队列
$q = new AMQPQueue($channel);
//设置队列名字 如果不存在则添加
$q-setName($q_name);
$q-setFlags(AMQP_DURABLE | AMQP_AUTODELETE);
echo "queue status: ".$q-declare();
echo "\n";
echo 'queue bind: '.$q-bind($e_name,$r_key);//将你的队列绑定到routingKey
echo "\n";
$channel-startTransaction();
echo "send: ".$ex-publish($message, $r_key); //将你的消息通过制定routingKey发送
$channel-commitTransaction();
$conn-disconnect();
?
消费方
?php
$conn_args = array('host' ='localhost', 'port' = 5672, 'login' = 'guest', 'password' = 'guest', 'vhost' = '/');
//$q_name='q_test6';//队列名称
$q_name=$_GET['q'];//队列名称
$conn = new AMQPConnection($conn_args);
$conn-connect();
$channel = new AMQPChannel($conn);
$q = new AMQPQueue($channel);
$q-setName($q_name);
$q-setFlags(AMQP_DURABLE | AMQP_AUTODELETE);
while($a=$q-declare())
{
echo "queue status: ".$a;
echo "==========\n";
$messages = $q-get(AMQP_AUTOACK);
print_r($messages-getBody());
echo "\n";
}
$conn-disconnect();
?
PHP7 不支持amqp吗
第三方扩展需要升级支持到PHP7才能正常安装,PHP7内核与PHP5内核间有很大区别,扩展库都需要进行适配才能正常编译。建议你关注amqp开发者提供的一些信息和开发进度。
PHP7 是支持的
用这个源码包试试