接下来我们用 php 连接 rabbitmq 玩一玩。
还没有安装 rabbitmq ,请参考 Rabbitmq 安装
还没有安装 PHP 的 AMQP 扩展,参考 PHP AMQP 扩展安装

一些概念

Rabbitmq 是一个功能很强大消息队列系统,使用起来可能不像某些 push 、pop 类型的队列简单(比如 redis 的list),Rabbitmq 支持消息的订阅发布模式,方便大型系统各个服务组件之间解耦和通信。我们首先要了解一些基本概念

Vhost: 可以先不深究,固定为 /
Connection:即连接, 与你日常理解的连接没有什么不同,比如 redis的连接,mysql的连接
Channel:即通道, 可以理解为一个连接中的子通道,想象一条高速公路,可能是 4车道的,也可能是 8 车道的,这些车道就是 Channel。

Exchange : 交换机,如果你知道交换机设备的话,它的原理跟交换机是基本一样的。
routingkey : 用来绑定交换机和队列的一个字符串。发送消息时需要指定 routingKey, 绑定了此 routingKey的队列将接收到此消息。
queue队列: 消息经过交换机,最终发送到队列中。

发布消息

<?php
$conn = [// Rabbitmq 服务地址'host' => '127.0.0.1',// Rabbitmq 服务端口'port' => '5672',// Rabbitmq 帐号'login' => 'guest',// Rabbitmq 密码'password' => 'guest','vhost'=>'/'
];//创建连接和channel
$conn = new AMQPConnection($conn);
if(!$conn->connect()) {die("Cannot connect to the broker!\n");
}
$channel = new AMQPChannel($conn);// 用来绑定交换机和队列
$routingKey = 'key_1';$ex = new AMQPExchange($channel);
//  交换机名称
$exchangeName = 'ex1';
$ex->setName($exchangeName);// 设置交换机类型
$ex->setType(AMQP_EX_TYPE_DIRECT);
// 设置交换机是否持久化消息
$ex->setFlags(AMQP_DURABLE);
$ex->declare();for($i=0; $i<5; ++$i){echo "Send Message:".$ex->publish(date('H:i:s')."用户".$i."注册" , $routingKey )."\n";
}

以上代码保存为 send.php

消费消息

<?php
$conn = [// Rabbitmq 服务地址'host' => '127.0.0.1',// Rabbitmq 服务端口'port' => '5672',// Rabbitmq 帐号'login' => 'guest',// Rabbitmq 密码'password' => 'guest','vhost'=>'/'
];//创建连接和channel
$conn = new AMQPConnection($conn);
if(!$conn->connect()) {die("Cannot connect to the broker!\n");
}
$channel = new AMQPChannel($conn);
$exchangeName = 'ex1';//创建交换机
$ex = new AMQPExchange($channel);
$ex->setName($exchangeName);$ex->setType(AMQP_EX_TYPE_DIRECT); //direct类型
$ex->setFlags(AMQP_DURABLE); //持久化
$ex->declare();//  创建队列
$queueName = 'queue1';
$q = new AMQPQueue($channel);
$q->setName($queueName);
$q->setFlags(AMQP_DURABLE);
$q->declareQueue();// 用于绑定队列和交换机,跟 send.php 中的一致。
$routingKey = 'key_1';
$q->bind($exchangeName,  $routingKey);//接收消息
$q->consume(function ($envelope, $queue) {$msg = $envelope->getBody();echo $msg."\n"; //处理消息
}, AMQP_AUTOACK);$conn->disconnect();

以上代码保存为 consume.php

运行代码

一开始队列是不存在的,我们需要先启动 consume.php 来初始化队列,打开终端,运行

php consume.php

启动后 , php consume.php 将阻塞监听队列消息。
然后打开新终端窗口运行:

php send.php

然后在新 consume.php 所在的终端窗口将看到接收到的消息。

RabbitMQ+PHP演示实例二相关推荐

  1. 初识RabbitMQ,附RabbitMQ+PHP演示实例(亲测通过)

    RabbitMQ是一个在AMQP基础上实现的企业级消息系统.何谓消息系统,就是消息队列系统,消息队列是""消费-生产者模型""的一个典型的代表,一端往消息队列中 ...

  2. RabbitMQ+PHP演示实例一

    新建rabbit_consumer.php作为消费者 <?php //配置信息 $conn_args = array( 'host' => '127.0.0.1', 'port' => ...

  3. python rabitmq_python使用rabbitmq实例二,工作队列

    上一篇介绍了rabbitmq的安装和经典的hello world!实例.这里将对工作队列(Work Queues)做一个了解.因为是接上一篇说明的,所以如果没看过上一篇,看这篇可能会比较难理解.上一篇 ...

  4. 【相位解缠】一维信号相位解包裹原理及其演示实例

    一.原理 如图1所示是灰度级为256的相位图,对于相位图中的每一个像素点,它的光强与其相应的相位是有联系的.结合式(1)可知,用于相位计算的反正切值函数的主值位于区间(−π,π](-\pi ,\pi ...

  5. C#2.0实例程序STEP BY STEP--实例二:数据类型

    C#2.0实例程序STEP BY STEP--实例二:数据类型 与其他.NET语言一样,C#支持Common Type Sysem(CTS),其中的数据类型集合不仅包含我们熟悉的基本类型,例如int, ...

  6. C语言库函数大全及应用实例二

                                                 [编程资料]C语言库函数大全及应用实例二 函数名: bioskey 功 能: 直接使用BIOS服务的键盘接口 ...

  7. python 分数序列求和公式_Python分数序列求和,编程练习题实例二十四

    本文是关于Python分数序列求和的应用练习,适合菜鸟练习使用,python大牛绕行哦. Python练习题问题如下: 问题简述:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13 要 ...

  8. ENSP配置 实例二 单臂路由配置

    ENSP配置 实例二 单臂路由配置 单臂路由配置 配置 路由: interface EigabitEthernet0/0/0 ip address 10.0.1.1 24 interface Eiga ...

  9. 案例演示Python二维列表与Java二维数组

    1.Python二维列表案例演示 运行程序,结果如下: 2.案例演示Java二维数组 package net.hw.test;/*** 功能:二维数组用法示例* 作者:华卫* 日期:2013年12月1 ...

最新文章

  1. PE 文件格式 .text .data .idata .rsrc
  2. 基于FAST-RCNN深度学习的目标识别算法的MATLAB仿真
  3. Oracle 查看sql语句执行计划方法
  4. 【译】Jumping into Solidity —The ERC721 Standard (Part 1)
  5. spring的jar包以及相关的API文档的下载方式
  6. BZOJ 3112 Zjoi2013 防守战线 单纯形
  7. 宁德时代:被美国制裁、与特斯拉谈崩等系谣言 已向公安机关报案
  8. 微信小程序srt_微信小程序微商城(八):缓存实现商品购物车功能
  9. python列表知识点_列表知识点整理
  10. [book]《超越感觉》
  11. WEB前端应了解的NO.IE内核浏览器
  12. WPF中的自定义控件模板
  13. 【超纯水制备技术分享】超纯水工艺设计流程以及纯水系统前处理技术——离子交换脱盐工艺介绍
  14. 在只有一个网线的前提下,实现两个电脑之间的局域网通信(伽卡他卡电子教室通信)...
  15. python-pep8规范
  16. 有了这个库,这些爬虫都不用亲自写了
  17. simon手册翻译_part1
  18. 如何去反编译一个ipa包
  19. 2021-7 论文阅读 [PatchScope: Memory Object Centric Patch Diffing]
  20. php中ceil的用法,php ceil函数怎么用?

热门文章

  1. 野火STM32F103——Fat文件系统及Flash芯片W25Q64学习记录
  2. 数据库索引的作用和优点缺点以及索引的11种用法
  3. 《基于NXP+DSP车载音频软件结构框图》
  4. html5加js兼容性辅助,解决低版本IE关于html5新特性的兼容性问题html5shiv.js和Respond.js,以及excanvas.js解决低版本IE不支持canvas的问题...
  5. Unity/C# 舍入的五种写法
  6. 美团面试,问了ThreadLocal原理,这个回答让我通过了
  7. 网站设计中文字排版的技巧
  8. html颜色块选择器,ColorPick:网页颜色选择器
  9. 振动信号的阶次分析(matlab)
  10. Linux系统更新国内源~适合所有版本Linux系统