RabbitMQ+PHP演示实例二
接下来我们用 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演示实例二相关推荐
- 初识RabbitMQ,附RabbitMQ+PHP演示实例(亲测通过)
RabbitMQ是一个在AMQP基础上实现的企业级消息系统.何谓消息系统,就是消息队列系统,消息队列是""消费-生产者模型""的一个典型的代表,一端往消息队列中 ...
- RabbitMQ+PHP演示实例一
新建rabbit_consumer.php作为消费者 <?php //配置信息 $conn_args = array( 'host' => '127.0.0.1', 'port' => ...
- python rabitmq_python使用rabbitmq实例二,工作队列
上一篇介绍了rabbitmq的安装和经典的hello world!实例.这里将对工作队列(Work Queues)做一个了解.因为是接上一篇说明的,所以如果没看过上一篇,看这篇可能会比较难理解.上一篇 ...
- 【相位解缠】一维信号相位解包裹原理及其演示实例
一.原理 如图1所示是灰度级为256的相位图,对于相位图中的每一个像素点,它的光强与其相应的相位是有联系的.结合式(1)可知,用于相位计算的反正切值函数的主值位于区间(−π,π](-\pi ,\pi ...
- C#2.0实例程序STEP BY STEP--实例二:数据类型
C#2.0实例程序STEP BY STEP--实例二:数据类型 与其他.NET语言一样,C#支持Common Type Sysem(CTS),其中的数据类型集合不仅包含我们熟悉的基本类型,例如int, ...
- C语言库函数大全及应用实例二
[编程资料]C语言库函数大全及应用实例二 函数名: bioskey 功 能: 直接使用BIOS服务的键盘接口 ...
- python 分数序列求和公式_Python分数序列求和,编程练习题实例二十四
本文是关于Python分数序列求和的应用练习,适合菜鸟练习使用,python大牛绕行哦. Python练习题问题如下: 问题简述:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13 要 ...
- ENSP配置 实例二 单臂路由配置
ENSP配置 实例二 单臂路由配置 单臂路由配置 配置 路由: interface EigabitEthernet0/0/0 ip address 10.0.1.1 24 interface Eiga ...
- 案例演示Python二维列表与Java二维数组
1.Python二维列表案例演示 运行程序,结果如下: 2.案例演示Java二维数组 package net.hw.test;/*** 功能:二维数组用法示例* 作者:华卫* 日期:2013年12月1 ...
最新文章
- PE 文件格式 .text .data .idata .rsrc
- 基于FAST-RCNN深度学习的目标识别算法的MATLAB仿真
- Oracle 查看sql语句执行计划方法
- 【译】Jumping into Solidity —The ERC721 Standard (Part 1)
- spring的jar包以及相关的API文档的下载方式
- BZOJ 3112 Zjoi2013 防守战线 单纯形
- 宁德时代:被美国制裁、与特斯拉谈崩等系谣言 已向公安机关报案
- 微信小程序srt_微信小程序微商城(八):缓存实现商品购物车功能
- python列表知识点_列表知识点整理
- [book]《超越感觉》
- WEB前端应了解的NO.IE内核浏览器
- WPF中的自定义控件模板
- 【超纯水制备技术分享】超纯水工艺设计流程以及纯水系统前处理技术——离子交换脱盐工艺介绍
- 在只有一个网线的前提下,实现两个电脑之间的局域网通信(伽卡他卡电子教室通信)...
- python-pep8规范
- 有了这个库,这些爬虫都不用亲自写了
- simon手册翻译_part1
- 如何去反编译一个ipa包
- 2021-7 论文阅读 [PatchScope: Memory Object Centric Patch Diffing]
- php中ceil的用法,php ceil函数怎么用?
热门文章
- 野火STM32F103——Fat文件系统及Flash芯片W25Q64学习记录
- 数据库索引的作用和优点缺点以及索引的11种用法
- 《基于NXP+DSP车载音频软件结构框图》
- html5加js兼容性辅助,解决低版本IE关于html5新特性的兼容性问题html5shiv.js和Respond.js,以及excanvas.js解决低版本IE不支持canvas的问题...
- Unity/C# 舍入的五种写法
- 美团面试,问了ThreadLocal原理,这个回答让我通过了
- 网站设计中文字排版的技巧
- html颜色块选择器,ColorPick:网页颜色选择器
- 振动信号的阶次分析(matlab)
- Linux系统更新国内源~适合所有版本Linux系统