网站原则广州网站开发公司

news/2025/9/24 17:21:49/文章来源:
网站原则,广州网站开发公司,电子商务工作室经营范围,怎样做自适应网站RabbitMQ#xff1a;高效的消息队列中间件及其 PHP 实现 一、什么是 RabbitMQ#xff1f; RabbitMQ 是一个开源的消息队列中间件#xff0c;使用 Erlang 编写#xff0c;遵循 AMQP#xff08;Advanced Message Queuing Protocol#xff09;协议。它的主要功能是提供一种…RabbitMQ高效的消息队列中间件及其 PHP 实现 一、什么是 RabbitMQ RabbitMQ 是一个开源的消息队列中间件使用 Erlang 编写遵循 AMQPAdvanced Message Queuing Protocol协议。它的主要功能是提供一种异步通信机制使得不同应用程序之间能够通过消息进行交互。通过使用 RabbitMQ开发者可以构建松耦合、可扩展的分布式系统广泛应用于微服务架构、任务调度、数据处理和实时通信等场景。 1.1 RabbitMQ 的核心概念 在深入了解 RabbitMQ 之前需要掌握一些基本概念 消息Message消息是 RabbitMQ 传递的数据单位包含负载和可选的头部属性。生产者Producer发送消息的应用程序将消息发送到 RabbitMQ 中的交换机Exchange。消费者Consumer接收和处理消息的应用程序从 RabbitMQ 中的队列Queue读取消息。交换机Exchange负责接收生产者发送的消息并将其路由到一个或多个队列。队列Queue存储消息的容器消息按顺序存放等待消费者处理。路由键Routing Key用于指示消息的目标队列的字符串。 二、RabbitMQ 的工作流程 RabbitMQ 的工作流程一般可以概括为以下几个步骤 生产者发送消息生产者创建消息并将其发送到指定的交换机。交换机路由消息交换机根据路由键和自身的路由规则将消息路由到一个或多个队列。消息存储在队列中消息被存储在目标队列中等待消费者处理。消费者接收消息消费者从队列中读取消息并进行处理。处理完成后消费者向 RabbitMQ 发送确认告知该消息已被成功处理。 三、RabbitMQ 的安装与配置 3.1 安装 RabbitMQ RabbitMQ 可以在多种操作系统上运行以下是一些常用的安装方法 3.1.1 使用 Docker 安装 Docker 是一种便捷的安装方式可以快速部署 RabbitMQ 实例 docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:management3.1.2 使用包管理工具 在 Ubuntu 系统上可以使用以下命令安装 RabbitMQ sudo apt-get update sudo apt-get install rabbitmq-server3.2 配置 RabbitMQ 安装完成后可以通过编辑配置文件来修改 RabbitMQ 的默认设置。RabbitMQ 的配置文件通常位于 /etc/rabbitmq/rabbitmq.conf。可以在配置文件中设置以下内容 虚拟主机用于逻辑隔离不同的应用程序。用户权限配置用户的权限和角色。队列持久化设置队列及消息的持久化选项。 四、RabbitMQ 的 PHP 实现 在 PHP 中与 RabbitMQ 进行交互我们通常使用 php-amqplib 库。它是一个纯 PHP 实现的 AMQP 客户端支持 RabbitMQ。 4.1 安装 php-amqplib 首先确保你的 PHP 环境已经安装了 Composer。然后可以通过 Composer 安装 php-amqplib 库 composer require php-amqplib/php-amqplib4.2 示例应用 以下是一个简单的 RabbitMQ 消息队列示例展示如何使用 PHP 实现生产者和消费者。 4.2.1 生产者代码 创建一个名为 producer.php 的文件内容如下 ?php require __DIR__ . /vendor/autoload.php;use PhpAmqpLib\Connection\AMQPStreamConnection; use PhpAmqpLib\Message\AMQPMessage;// 创建 RabbitMQ 连接 $connection new AMQPStreamConnection(localhost, 5672, guest, guest); $channel $connection-channel();// 声明队列 $channel-queue_declare(task_queue, false, true, false, false, false, []);// 发送消息 $data implode( , array_slice($argv, 1)); if (empty($data)) {$data Hello World!; }$msg new AMQPMessage($data, [delivery_mode AMQPMessage::DELIVERY_MODE_PERSISTENT, // 设置消息持久化 ]);$channel-basic_publish($msg, , task_queue);echo [x] Sent $data\n;// 关闭连接 $channel-close(); $connection-close();4.2.2 消费者代码 创建一个名为 consumer.php 的文件内容如下 ?php require __DIR__ . /vendor/autoload.php;use PhpAmqpLib\Connection\AMQPStreamConnection; use PhpAmqpLib\Message\AMQPMessage;// 创建 RabbitMQ 连接 $connection new AMQPStreamConnection(localhost, 5672, guest, guest); $channel $connection-channel();// 声明队列 $channel-queue_declare(task_queue, false, true, false, false, false, []);// 定义回调函数 $callback function ($msg) {echo [x] Received , $msg-body, \n;sleep(substr_count($msg-body, .)); // 模拟处理时间echo [x] Done\n;$msg-ack(); // 确认消息已经被处理 };// 设置消费者 $channel-basic_qos(null, 1, null); // 确保每次只处理一条消息 $channel-basic_consume(task_queue, , false, false, false, false, $callback);echo [*] Waiting for messages. To exit press CTRLC\n; while ($channel-is_consuming()) {$channel-wait(); }// 关闭连接 $channel-close(); $connection-close();4.3 运行示例 启动 RabbitMQ 服务确保 RabbitMQ 服务正在运行。启动消费者在一个终端中运行消费者代码 php consumer.php发送消息在另一个终端中运行生产者代码并传递消息体 php producer.php Hello World!查看输出消费者会收到消息并处理输出结果如下 [*] Waiting for messages. To exit press CTRLC[x] Received Hello World![x] Done五、RabbitMQ 的特性及优势 5.1 高可用性 RabbitMQ 支持集群和镜像队列功能可以在多台服务器之间分布负载确保系统的高可用性。在发生故障时RabbitMQ 可以自动将流量切换到其他节点保证业务的连续性。 5.2 消息持久化 RabbitMQ 提供了消息的持久化机制。消息可以在发送时被标记为持久化RabbitMQ 会将其存储在磁盘上确保即使在系统崩溃的情况下也不会丢失。 5.3 灵活的路由机制 RabbitMQ 的交换机支持多种路由策略开发者可以根据实际需求选择合适的交换机类型和路由规则实现复杂的消息路由逻辑。 5.4 事务与确认机制 RabbitMQ 支持消息确认机制确保消费者成功处理消息后才能将其从队列中移除。这样可以防止消息丢失或重复处理。此外RabbitMQ 还支持事务机制使得多个操作可以作为一个原子操作执行。 5.5 可扩展性 RabbitMQ 可以轻松地横向扩展支持增加节点以满足更高的负载需求。新节点可以无缝地加入到现有集群中自动参与消息处理。 六、最佳实践与建议 在使用 RabbitMQ 时遵循一些最佳实践可以提高系统的性能和可靠性 6.1 设计合理的消息结构 在设计消息时保持消息结构的简洁和一致性可以降低消息的大小提高处理效率。同时保证消息的版本控制以便于后续的系统升级和维护。 6.2 使用持久化选项 在需要确保消息不丢失的场景下务必使用持久化选项。虽然这会增加一定的性能开销但在关键业务中这种开销是值得的。 6.3 适当使用确认机制 在处理重要消息时确保启用消息确认机制避免因系统故障导致消息丢失。可以根据业务需求选择手动确认或自动确认。 6.4 监控 RabbitMQ 状态 使用 RabbitMQ 提供的管理界面可以实时监控队列的状态、消息的流动情况等帮助开发者及时发现和解决问题。 6.5 进行负载均衡 在高并发的场景中可以通过增加消费者实例来进行负载均衡确保系统的高可用性和性能。 七、总结 RabbitMQ 是一个功能强大的消息队列中间件提供了高效的消息传递机制和灵活的路由策略。通过使用 PHP 的 php-amqplib 库开发者可以轻松地与 RabbitMQ 进行交互实现生产者和消费者的功能。

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

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

相关文章

ps-填充色

ps-填充色一、填充颜色用矩形选框选中范围; Ctrl + delete:填充背景色; Alt + delete:填充前景色;不将就,不强求!

PythonStudio_圆的面积demo源代码

# Powered By Python Studio, The best Python GUI IDE to download from glsite.com. import os from glcl import *class Form1(Form):def __init__(self, owner):self.Button3 = Button(self)self.Button2 = Button…

HarmonyOS 5分布式数据同步实战:跨设备待办事项应用

🔧 一、前期准备:配置与权限 在开始编码前,需要进行一些基础配置。模块配置 (module.json5): 在 module.json5文件中申请分布式数据同步权限。 {"module": {"requestPermissions": [{"na…

深入理解HarmonyOS 5的AVSession:构建跨设备媒体播放器

🎯 一、AVSession 概述与核心价值 AVSession(媒体会话)是HarmonyOS分布式媒体控制的核心框架。它允许应用程序将本地播放的媒体信息和控制能力暴露给系统,使得其他设备(如手机、平板、智慧屏)可以发现、查看和控…

Extjs小例子

Extjs小例子 1.监听文本框是否已经修改过xtype : textfield,  fieldLable : 标题,  listeners : {     change : function(field,newValue,oldValue){ alert(newValue+---+oldValue);  …

郑州网站建设怎么样短视频推广方案怎么做

随着半导体技术的不断进步,晶圆制造作为集成电路产业的核心环节,对生产过程的精密性和洁净度要求日益提高。在众多晶圆制造工具中,PFA(全氟烷氧基)晶圆夹以其独特的材质和性能,在近年来逐渐受到业界的广泛关…

HT-AD4PS-1+ 一分四射频功分器:1-500 MHz 小尺寸/低插损,通信、医疗全能打

HT-AD4PS-1+ 一分四射频功分器:1-500 MHz 小尺寸/低插损,通信、医疗全能打成都恒利泰(HenryTech)HT-AD4PS-1+ 是一款全国产化的一分四表贴功分器/合路器,频率覆盖 1-500 MHz,插入损耗≤1.8 dB,体积小巧,可直接…

HarmonyOS资源管理与访问:多分辨率与多语言适配

本文将深入探讨HarmonyOS应用开发中的资源管理机制,重点介绍多分辨率适配和多语言本地化的完整解决方案。1. 资源管理系统架构 HarmonyOS提供了统一的资源管理框架,支持应用资源的分类、访问和适配。资源管理系统采用…

面试官:为什么没有虚拟线程池?

Java 官方文档明确指出:Do not pool virtual threads. 虚拟线程不是昂贵资源,永远不应该被池化。 应该为每个任务创建一个新的虚拟线程,它们应该是短暂的、任务级别的。这是为什么呢?为什么只有虚拟线程 Virtual T…

做外国网站自媒体网络工程师和做网站哪个难

————— 第二天 —————————————————下面我们一起来研究这三个问题。问题1:哪些是需要回收的?首先我们需要知道如何哪些垃圾需要回收?判断对象是否需要回收有两种算法。一种是引用计数算法、一种是可达性分析算法。引用计…

润生软件简介:以“重构与共生”引领商业未来

2014年,广东企业家陈总敏锐洞察到:当算力实现百倍跃升,数字信息将深刻重塑社会结构,传统行业与企业形态面临全面重构。基于此,他发起创立了润生公司(Reconstruction-Symbiosis Framework,简称RS),开启一场以“…

Python 并发编程

Python 并发编程是提升程序执行效率的核心技术,尤其在处理多任务场景(如网络请求、数据计算、文件 IO 等)时至关重要。 1、threading与线程池 多线程是 Python 中最常用的并发方式之一,通过创建多个线程实现任务并…

博物馆展陈设计公司搜索引擎优化什么意思

hi,我是逸尘,一起学java吧 目标(任务驱动) 1.请重点的掌握I/O的。 场景:最近你在企业也想搞一个短视频又想搞一个存储的云盘,你一听回想到自己对于这些存储的基础还不是很清楚,于是回家开始了…

做液压的公司网站成都营销型网站建设中账号

文章目录 1. 命令概述2. 命令格式3. 常用选项4. 相关描述4.1 tree 命令安装 5. 参考示例5.1 创建树形目录5.2 使用 tree 命令查看树形目录 1. 命令概述 tree 命令用于在命令行界面以树状图形式显示目录及其子目录的内容。这个命令递归地列出所有子目录,并可选择显示…

安装pyautogui时与setuptool时冲突报错-module setuptools.dist has no attribute check_test_suite

采用离线的安装方式: 下载 命令: pip install E:\Codes\Wheels\PyAutoGUI-0.9.54.tar.gz --no-deps --target=..\myyolo1\Lib\site-packages

牛客周赛 Round 110 题解

View Post牛客周赛 Round 110 题解牛客周赛 Round 110 A 小苯的数字染色 ​ 手玩发现只有 \(n\) 为 \(1\) 不行。 void solve(){int n;cin >> n;if(n == 1){cout << "NO\n";}else{cout <<…

统计机器学习经典分类算法MATLAB实现

一、逻辑回归(Logistic Regression) 核心代码: % 加载数据(以鸢尾花数据集为例) load fisheriris; X = meas(:,1:2); % 选择前两个特征 Y = species;% 数据划分 cv = cvpartition(Y, HoldOut, 0.3); X_train = X(…

从安装到中文界面,一文带你玩转 DaVinci Resolve 20(零基础也能搞定)

软件介绍 DaVinci Resolve Studio v20.0.49是Blackmagic Design推出的专业影视后期制作软件,集成剪辑、调色、视觉特效、动态图形与音频后期功能于一体。该版本新增超100项创新功能,包括基于AI的UltraNR降噪工具、智…

靶场1

进入kali root权限反弹一个shell 攻击机监听: nc -lvnp 10000 目的主机: python3 drupa7-CVE-2018-7600.py http://210.26.72.210/drupal/ -c "bash -c bash -i >& /dev/tcp/210.26.72.230/10000 0>&…

昆明网站建设织梦外国客户网站

首先探讨一下为什么要使用nginx&#xff1a; 1、类似于apacheresin&#xff0c;nginx用于提供静态页面服务&#xff0c;比java服务器要强。虽然这些java服务器的性能都不赖&#xff0c;tomcat新版甚至还支持了epoll&#xff0c;但是用nginx来处理静态文件是一定比这些服务器更…