Tools
首页
画图
音乐
采集
记事
博客
实验室
登录
lypeng
146
文章
11
分类
46
记事
分类
生活-[23]
Linux-[24]
前端-[9]
数据库-[16]
PHP-[31]
git-[7]
其他-[6]
python-[20]
算法-[4]
React-Native-[4]
中草药-[2]
广告位1
广告位2
首页
/ PHP
返回列表
php操作rabbitMQ
阅读:567
发布:2019-04-09
作者:lypeng
我是Windows中操作的,下载扩展安装,编写代码测试 ## 下载php_amqp扩展安装 1. 去php官网下载扩展 目前我用的php7.1.20_x64_nts版本! php_amqp.dll 扔到 D:\phpStudy\php\php-7.1.20-nts\ext目录下,rabbitmq.4.dll 扔到 D:\phpStudy\php\php-7.1.20-nts目录下 2. 重启查看是否安装成功 第一次重启没反应,退出再次重启好了,PHPinfo看到amqp信息了 [](/uploads/lypeng/20190409155329.jpg) ## 编写代码测试 productor.php ```php '127.0.0.1', 'port' => '5672', 'login' => 'admin', 'password' => 'admin', 'vhost'=>'/' ); $e_name = 'e_linvo'; //交换机名 //$q_name = 'q_linvo'; //无需队列名 $k_route = 'key_1'; //路由key //创建连接和channel $conn = new AMQPConnection($conn_args); if (!$conn->connect()) { die("Cannot connect to the broker!\n"); } $channel = new AMQPChannel($conn); //创建交换机对象 $ex = new AMQPExchange($channel); $ex->setName($e_name); date_default_timezone_set("Asia/Shanghai"); //发送消息 //$channel->startTransaction(); //开始事务 for($i=0; $i<5; ++$i){ sleep(1);//休眠1秒 //消息内容 $message = "TEST MESSAGE! $i ".date("h:i:sa"); echo "Send Message:".$ex->publish($message, $k_route)."\n"; } //$channel->commitTransaction(); //提交事务 $conn->disconnect(); ?> ``` consumer.php ```php '127.0.0.1', 'port' => '5672', 'login' => 'admin', 'password' => 'admin', 'vhost'=>'/' ); $e_name = 'e_linvo'; //交换机名 $q_name = 'q_linvo'; //队列名 $k_route = 'key_1'; //路由key //创建连接和channel $conn = new AMQPConnection($conn_args); if (!$conn->connect()) { die("Cannot connect to the broker!\n"); } $channel = new AMQPChannel($conn); //创建交换机 $ex = new AMQPExchange($channel); $ex->setName($e_name); $ex->setType(AMQP_EX_TYPE_DIRECT); //direct类型 $ex->setFlags(AMQP_DURABLE); //持久化 echo "Exchange Status:".$ex->declareExchange()."\n"; //创建队列 $q = new AMQPQueue($channel); $q->setName($q_name); $q->setFlags(AMQP_DURABLE); //持久化 echo "Message Total:".$q->declareQueue()."\n"; //绑定交换机与队列,并指定路由键 echo 'Queue Bind: '.$q->bind($e_name, $k_route)."\n"; //阻塞模式接收消息 echo "Message:\n"; while(True){ $q->consume('processMessage'); //$q->consume('processMessage', AMQP_AUTOACK); //自动ACK应答 } $conn->disconnect(); /** * 消费回调函数 * 处理消息 */ function processMessage($envelope, $queue) { $msg = $envelope->getBody(); echo $msg."\n"; //处理消息 $queue->ack($envelope->getDeliveryTag()); //手动发送ACK应答 } ?> ``` 先运行consumer.php,然后运行productor.php,看到效果了~ [](/uploads/lypeng/20190409163536.jpg) 参考:https://blog.csdn.net/xiaojiejie123s/article/details/77717469?_blank ## 使用composer类库操作 官网文档:https://www.rabbitmq.com/tutorials/tutorial-one-php.html?_blank ### 1. 安装类库 `composer require php-amqplib/php-amqplib` ### 2. 编写测试代码 ```php connection = new AMQPStreamConnection('localhost', 5672, 'admin', 'admin'); $this->channel = $this->connection->channel(); } public function productor(){ $this->channel->queue_declare('hello', false, false, false, false); $msg = new AMQPMessage('Hello World!'); $this->channel->basic_publish($msg, '', 'hello'); echo " [x] Sent 'Hello World!'\n"; $this->channel->close(); $this->connection->close(); exit(); } public function consumer(){ $this->channel->queue_declare('hello', false, false, false, false); echo " [*] Waiting for messages. To exit press CTRL+C\n"; $callback = function ($msg) { echo ' [x] Received ', $msg->body, "\n"; }; $this->channel->basic_consume('hello', '', false, true, false, false, $callback); while (count($this->channel->callbacks)) { $this->channel->wait(); } $this->channel->close(); $this->connection->close(); exit(); } } ``` ### 3. 运行测试 效果如下图: [](/uploads/lypeng/20190409173346.jpg) ### 深入了解RabbitMQ,可以查看这位同学的CSDN博客: https://blog.csdn.net/vbirdbest/article/category/7296570?_blank
------本文结束
感谢阅读------
上一篇:
PHP自动加载机制介绍
下一篇:
redis cluster构建