详解PHP+RabbitMQ(AMQP协议、通讯架构、6大模式、交换机队列消息持久化、死信队列、延时队列、消息丢失、重复消费、消息应答、消息应答、发布确认、故障转移、不公平分发、优先级、等)

在回答这个问题之前,我需要先澄清一点:问题本身并没有给出一个明确的问题,而是一个包含多个子问题的列表。我将会尝试回答这些子问题,并提供相关的解释和示例代码。

  1. PHP中使用RabbitMQ

首先,确保你已经安装了RabbitMQ和PHP的amqp扩展。




$connection = new AMQPConnection(array(
    'host' => '127.0.0.1',
    'port' => '5672',
    'vhost' => '/',
    'login' => 'guest',
    'password' => 'guest'
));
 
$connection->connect() or die("Cannot connect to the broker!\n");
 
// 创建一个通道
$channel = new AMQPChannel($connection);
 
// 创建一个交换机
$exchange = new AMQPExchange($channel);
$exchange->setName('exchange_name');
$exchange->setType(AMQP_EX_TYPE_DIRECT); // 直接类型
$exchange->setFlags(AMQP_DURABLE); // 持久化
 
// 发送消息
$exchange->publish('Hello, RabbitMQ!', 'routing_key');
 
// 关闭通道和连接
$channel->close();
$connection->close();
  1. AMQP协议详解

AMQP(Advanced Message Queuing Protocol)是一个提供统一消息服务的应用层标准高级消息队列协议,设计的目的是为了解决不同消息中间件的兼容问题。

  1. RabbitMQ通讯架构

RabbitMQ是一个消息代理,它接受来自生产者的消息,并将它们路由给服务器上的消费者。RabbitMQ使用的是AMQP协议,因此它的通讯架构包括以下几个主要组件:

  • 生产者:发送消息的应用。
  • 交换机:接收生产者发送的消息并将它们路由到一个或多个队列。
  • 队列:存储消息直到消费者取走。
  • 消费者:接收消息并处理它们的应用。
  1. 6大模式

RabbitMQ中有6种模式,分别是简单模式、工作队列模式、发布/订阅模式、路由模式、主题模式和RPC模式。

简单模式:一个生产者,一个消费者。

工作队列模式:多个消费者共享一个队列,平衡负载。

发布/订阅模式:一个生产者发给多个消费者。

路由模式:生产者将消息发给特定的队列。

主题模式:路由模式的拓展,通过模式匹配进行路由。

RPC模式:远程过程调用,函数调用的返回结果。

  1. 队列/消息持久化

可以设置队列和消息的持久化属性,以保证在服务器重启后消息不会丢失。




// 设置队列持久化
$queue->setFlags(AMQP_DURABLE);
 
// 发送持久化消息
$exchange->publish($message, $routingKey, AMQP_DURABLE);
  1. 交换机类型

RabbitMQ中有四种交换机类型:直接(Direct)、主题(Topic)、头部(Headers)和 fanout(广播)。

直接交换机:通过路由键完全匹配。

主题交换机:通过路由键模糊匹配。

头部交换机:通过查看消息头部的匹配。

广

PHP , mq , 架构
最后修改于:2024年08月14日 10:41

评论已关闭

推荐阅读

DDPG 模型解析,附Pytorch完整代码
2024年11月24日
DQN 模型解析,附Pytorch完整代码
2024年11月24日
AIGC实战——Transformer模型
2024年12月01日
Socket TCP 和 UDP 编程基础(Python)
2024年11月30日
python , tcp , udp
如何使用 ChatGPT 进行学术润色?你需要这些指令
2024年12月01日
AI
最新 Python 调用 OpenAi 详细教程实现问答、图像合成、图像理解、语音合成、语音识别(详细教程)
2024年11月24日
ChatGPT 和 DALL·E 2 配合生成故事绘本
2024年12月01日
omegaconf,一个超强的 Python 库!
2024年11月24日
【视觉AIGC识别】误差特征、人脸伪造检测、其他类型假图检测
2024年12月01日
[超级详细]如何在深度学习训练模型过程中使用 GPU 加速
2024年11月29日
Python 物理引擎pymunk最完整教程
2024年11月27日
MediaPipe 人体姿态与手指关键点检测教程
2024年11月27日
深入了解 Taipy:Python 打造 Web 应用的全面教程
2024年11月26日
基于Transformer的时间序列预测模型
2024年11月25日
Python在金融大数据分析中的AI应用(股价分析、量化交易)实战
2024年11月25日
AIGC Gradio系列学习教程之Components
2024年12月01日
Python3 `asyncio` — 异步 I/O,事件循环和并发工具
2024年11月30日
llama-factory SFT系列教程:大模型在自定义数据集 LoRA 训练与部署
2024年12月01日
Python 多线程和多进程用法
2024年11月24日
Python socket详解,全网最全教程
2024年11月27日