经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » PHP » 查看文章
PHP RabbitMQ消息队列演示代码
来源:cnblogs  作者:失恋的蔷薇  时间:2021/5/6 18:03:03  对本文有异议

先决条件

已安装PHP,Erlang和RabbitMQ。

安装PHP环境下使用的RabbitMQ第三方库——php-amqplib

使用composer安装php-amqplib库。

生产者代码

  1. <?php
  2. require 'vendor/autoload.php';
  3. use PhpAmqpLib\Connection\AMQPStreamConnection;
  4. use PhpAmqpLib\Message\AMQPMessage;
  5. $conf = [
  6. 'host' => 'localhost',
  7. 'port' => 5672,
  8. 'user' => 'admin',
  9. 'password' => 'admin',
  10. 'vhost' => '/',
  11. ];
  12. $exchangeName = 'testExch'; //交换机名称
  13. $queueName = 'testQue'; //队列名称
  14. $routingKey = 'testRoute'; //路由关键字(也可以省略)
  15. //建立生产者与mq之间的连接
  16. $conn = new AMQPStreamConnection($conf['host'], $conf['port'], $conf['user'], $conf['password'], $conf['vhost']);
  17. $channel = $conn->channel(); //在已连接基础上建立生产者与mq之间的通道
  18. $channel->exchange_declare($exchangeName, 'direct', false, true, false); //声明初始化交换机
  19. $channel->queue_declare($queueName, false, true, false, false); //声明初始化一条队列
  20. $channel->queue_bind($queueName, $exchangeName, $routingKey); //将队列与某个交换机进行绑定,并使用路由关键字
  21.  
  22. for ($i=1; $i<=20; $i++){
  23. $msgBody = json_encode(["name" => "WCW", "no" => $i]);
  24. $msg = new AMQPMessage($msgBody, ['content_type' => 'text/plain', 'delivery_mode' => 2]); //构建消息
  25. $ret = $channel->basic_publish($msg, $exchangeName, $routingKey); //发布消息到某个交换机
  26. }
  27. $channel->close();
  28. $conn->close();

消费者代码

  1. <?php
  2. require 'vendor/autoload.php';
  3. use PhpAmqpLib\Connection\AMQPStreamConnection;
  4. $conf = [
  5. 'host' => 'localhost',
  6. 'port' => 5672,
  7. 'user' => 'admin',
  8. 'password' => 'admin',
  9. 'vhost' => '/',
  10. ];
  11. $exchangeName = 'testExch'; //交换机名
  12. $queueName = 'testQue'; //队列名称
  13. $routingKey = 'testRoute'; //路由关键字(也可以省略)
  14. //建立生产者与mq之间的连接
  15. $conn = new AMQPStreamConnection($conf['host'], $conf['port'], $conf['user'], $conf['password'], $conf['vhost']);
  16. $channel = $conn->channel(); //在已连接基础上建立生产者与mq之间的通道
  17. $channel->queue_declare($queueName, false, true, false, false); //声明初始化一条队列
  18. //回调函数,数据处理
  19. $callback = function($msg) {
  20. echo " Received: ", $msg->body, "\n";
  21. };
  22. $channel->basic_consume($queueName, '', false, true, false, false, $callback); //消费接收消息
  23. //监听消息,一有消息,立马就处理
  24. while(count($channel->callbacks)) {
  25. $channel->wait();
  26. }

效果测试

执行生产者程序:

执行消费者程序:

消息接收成功!

 

至此。转载请注明出处,记得扫码打赏支持哦,谢谢!

 

原文链接:http://www.cnblogs.com/wcwnina/p/14728220.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号