【PHP进阶】Rabbitmq的实际使用

RabbitMQ是一个流行的消息队列中间件,它提供了可靠的消息传递机制。在使用RabbitMQ时,有几个重要的概念需要了解:

消息队列(Message Queue):RabbitMQ中的核心概念之一。它是消息的缓冲区,用于存储发送者发送的消息,以便等待接收者处理。

消息生产者(Producer):负责向消息队列中发送消息的应用程序或组件。

消息消费者(Consumer):从消息队列中接收并处理消息的应用程序或组件。

交换机(Exchange):用于将消息路由到一个或多个消息队列的组件。交换机根据规则(如路由键)将消息发送到相应的队列。

队列绑定(Queue Binding):将队列与交换机关联的过程。绑定定义了交换机如何将消息路由到与之绑定的队列。

路由键(Routing Key):用于将消息从交换机路由到特定队列的关键字。交换机根据消息的路由键将消息发送到一个或多个与之匹配的队列。

确认(Acknowledgment):指消费者收到消息并已确认处理完成的机制。RabbitMQ支持确认机制,确保消息被正确地处理。

持久化(Durability):指消息队列和消息是否持久化存储到磁盘上,以防止消息丢失。持久化确保在RabbitMQ服务器重启时不会丢失消息。

PHP实际运用:

我们来创建一个简单的 PHP 实例来使用 RabbitMQ。首先,你需要确保已经安装了 RabbitMQ 服务器,并且在 PHP 中安装了 RabbitMQ 扩展。然后,我们将创建一个简单的生产者和消费者来发送和接收消息。

步骤 1: 安装 RabbitMQ PHP 扩展

你可以使用 pecl 来安装 RabbitMQ PHP 扩展:

pecl install amqp

步骤 2: 编写生产者

<?php
require_once __DIR__ . '/vendor/autoload.php'; // 载入 Composer 自动加载器use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;// 连接到 RabbitMQ 服务器
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();// 声明队列
$channel->queue_declare('hello', false, false, false, false);// 创建消息
$msg = new AMQPMessage('Hello World!');// 发送消息到队列
$channel->basic_publish($msg, '', 'hello');echo " [x] Sent 'Hello World!'\n";// 关闭连接
$channel->close();
$connection->close();
?>

步骤 3: 编写消费者

<?php
require_once __DIR__ . '/vendor/autoload.php'; // 载入 Composer 自动加载器use PhpAmqpLib\Connection\AMQPStreamConnection;// 连接到 RabbitMQ 服务器
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();// 声明队列
$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";
};// 消费队列消息
$channel->basic_consume('hello', '', false, true, false, false, $callback);// 持续监听消息
while ($channel->is_consuming()) {$channel->wait();
}// 关闭连接
$channel->close();
$connection->close();
?>

这就是一个简单的 RabbitMQ 示例。生产者发送消息到名为 “hello” 的队列,而消费者监听这个队列并打印出收到的消息.

我们基于这些基础代码就能做业务啦。不同的业务会有些许差别。

本文由mdnice多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/710669.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

容器安全工具使用指南:保障容器环境安全的利器

随着容器技术的广泛应用,容器安全成为关注的焦点。本文将深入介绍几个流行的容器安全工具,我们将深入了解容器安全领域的Top 10工具,包括Trivy、veinmind-tools、Clair、Docker Bench for Security、Sysdig Falco、neuVector等,详细讲解它们的功能、原理、安装和使用方法,…

【精简版】Ubuntu/Linux Anaconda 命令行终端安装

网上重复内容很多&#xff0c;大都啰里啰嗦&#xff0c;特作此笔记。 【精简版】Ubuntu/Linux Anaconda 命令行安装 1 下载安装包1.1 寻找适配版本安装包1.2 下载 2 运行安装程序3 设置安装路径4 添加环境变量并运行4.1 环境变量4.2 运行 5 验证安装成功感谢及参考博文 1 下载…

js ES6判断字符串是否以某个字符串开头或者结尾startsWith、endsWith

1.前言 startsWith&#xff1a;startsWith方法用于检查字符串是否以指定的字符串开头。 endsWith&#xff1a;endsWith方法用于检查字符串是否以指定的字符串结尾。 2.用法示例 const str Hello, world!;console.log(str.startsWith(Hello)); // true console.log(str.starts…

音频提取使用什么方法?视频提取音频

在数字技术与多媒体日益普及的今天&#xff0c;音频提取已成为一个常见且重要的任务。无论是为了制作视频、编辑音乐&#xff0c;还是进行语音识别和分析&#xff0c;我们都需要从原始材料中提取音频。那么&#xff0c;音频提取通常使用什么方法呢&#xff1f; 1. 使用专业的音…

【Git教程】(七)变基与拣取 —— 变基操作的概念、适用场景及其实现方式,拣取操作的实现 ~

Git教程 变基与拣取 1️⃣ 工作原理&#xff1a;复制提交2️⃣ 避免“钻石链”3️⃣ 什么情况下会遇到冲突4️⃣ 移植分支5️⃣ 执行变基后原提交的情况6️⃣ 提交的原件与副本存在于同一版本库中所带来的问题7️⃣ 捡取&#x1f33e; 总结 通常&#xff0c; 一段提交历史中往…

编写科技项目验收测试报告需要注意什么?第三方验收测试多少钱?

科技项目验收测试是一个非常重要的环节&#xff0c;它对于确保科技项目的质量和可用性起着至关重要的作用。在项目完成后&#xff0c;进行科技项目验收测试可以评估项目的功能、性能和可靠性等方面&#xff0c;并生成科技项目验收测试报告&#xff0c;以提供给项目的相关方参考…

第十六届“中关村青联杯”全国研究生数学建模竞赛-E题:全球变暖气候预测分析(续)

目录 五、问题二:模型的建立与求解 5.1 问题分析 5.2 数据获取及处理 5.2.1 数据获取

git commit 的规范

今天在一个项目中提交git时报了下面的错误&#xff1a;subject may not be empty [subject-empty] type may not be empty [type-empty]&#xff0c;上网查阅了一些资料&#xff0c;发现这种一种规范约束&#xff0c;用下面的命令我又重新提交了一次 git commit -m "feat…

SpringFramework实战指南(七)

SpringFramework实战指南(七) 4.5 三种配置方式总结4.5.1 XML方式配置总结4.5.2 XML+注解方式配置总结4.5.3 完全注解方式配置总结4.6 整合Spring5-Test5搭建测试环境4.5 三种配置方式总结 4.5.1 XML方式配置总结 所有内容写到xml格式配置文件中声明bean通过<bean标签<…

Docker技术概论(2):Docker环境的搭建

Docker技术概论&#xff08;2&#xff09; Docker环境的搭建 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blo…

自动采集API壁纸系统源码自适应手机端

HTML5响应式自动采集API壁纸系统源码自适应手机端 瀑布流加载 源码下载&#xff1a;https://www.qqmu.com/2303.html

InnoDB备份与恢复篇(1)-InnoDB的备份与还原策略

InnoDB数据库的备份与还原策略 MySQL是一种广泛使用的关系型数据库管理系统&#xff0c;而InnoDB是MySQL的默认存储引擎之一。在生产环境中&#xff0c;对于数据库的备份和还原至关重要&#xff0c;以确保数据的安全性和可靠性。本文将介绍MySQL数据库InnoDB引擎的备份与还原策…

七、有序的列表

描述 创建一个依次包含字符串P、y、t、h、o和n的列表my_list&#xff0c;先使用sorted函数对列表my_list进行临时排序&#xff0c;第一行输出排序后的完整列表&#xff0c;第二行输出原始的列表。再使用sort函数对列表my_list进行降序排序&#xff0c;第三行输出排序后完整的列…

yolov8涨点技巧,添加SwinTransformer注意力机制,提升目标检测效果

目录 摘要 SwinTransformer原理 代码实现 YOLOv8详细添加步骤 ymal文件内容 one_swinTrans three_swinTrans 启动命令 完整代码分享 摘要 Swin Transformer通过引入创新的分层注意力机制展现了其架构的独特性&#xff0c;该机制通过将注意力区域划分为块并在这些块内执…

小白的matlab简单应用

基本概念 1、数组array 数组是一个更通用的数据结构&#xff0c;可以是一维、二维或多维的。 一维数组通常被称为向量。 二维数组可以被视为矩阵。 多维数组可以用来表示更高维度的数据&#xff0c;例如三维数组可以表示一系列的矩阵。 用过的函数 20240229 1、读取excel文件…

python_pyecharts_堆积图

from pyecharts.charts import Bar from pyecharts import options as opts # 构建数据 x_data ["A", "B", "C", "D", "E"] y_data [10, 20, 30, 40, 50] z_data [5, 15, 25, 35, 45] # 创建堆积柱状图Bar实例 bar Bar(…

进阶了解C++(4)——多态

在上篇文章中&#xff0c;简单的介绍了多态中的概念以及其相关原理。本文将针对多态中其他的概念进一步进行介绍&#xff0c;并且更加深入的介绍关于多态的相关原理。 目录 1. 抽象类&#xff1a; 2. 再谈虚表&#xff1a; 3. 多继承中的虚函数表&#xff1a; 1. 抽象类&am…

MySQL 用户账号迁移

文章目录 前言1. 工具安装1.1 下载安装包1.2 编译安装 2. 用户迁移后记 前言 有一个典型的使用场景&#xff0c;就是 RDS 下云大多数都是通过 DTS 进行数据传输的&#xff0c;用户是不会同步到自建数据库的。需要运维人员在自建数据库重新创建用户&#xff0c;如果用户数量很多…

基于springboot+vue的在线考试与学习交流平台

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

中小型水库安全监测运营解决方案,筑牢水库安全防线

我国水库大坝具有“六多”的特点。第一&#xff0c;总量多。我国现有水库9.8万座&#xff0c;是世界上水库大坝最多的国家。第二&#xff0c;小水库多。我国现有水库中95%的水库是小型水库。第三&#xff0c;病险水库多。 目前&#xff0c;在我国水库管理中&#xff0c;部分地方…