消息队列中间件 - 详解RabbitMQ6种模式

news2024/11/19 1:46:14

RabbitMQ 6种工作模式

对RabbitMQ 6种工作模式(简单模式、工作模式、订阅模式、路由模式、主题模式、RPC模式)进行场景和参数进行讲解,PHP代码作为实例。

安装

客户端实现:添加扩展,执行composer.phar install命令

{
    "require": {
        "php-amqplib/php-amqplib": ">=3.0"
    }
}

引入包

require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;

建立一个链接,

# 链接服务

$connection = new AMQPStreamConnection('127.0.0.1', 5672, 'stark', '1990@stark');
$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();

6种模式

1.简单模式

python-one.png

简单模式是最简单的使用方式,P代表生产者,C代表消费者,红色的代表队列,执行过程生产者发送消息到队列,右面的消费者消费消息,需要注意的是这里没有交换机。

生产者代码(PHP)

# 声明队列
$queueName = 'MqName';
$channel->queue_declare($queueName, false, false, false, false);

queue_declare 参数说明:

  • 队列名
  • 检测队列是否存在,true只检测不创建,false会创建
  • 是否持久化队列,true持久化
  • 是否私有队列 true代表私有
  • 当消费者断开后,队列是否自动删除
# 创建AMQP消息类型
$msg = new AMQPMessage($data,
            array('delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT)
        );

AMQPMessage 参数说明:
1.消息体
2.是否持久化

$channel->basic_publish($msg, '', $queueName);

basic_publish参数详解:

  • 发送内容
  • 交换机名称,简单模式没有使用交换机
  • 队列名称

消费者代码:

$channel->basic_consume('hello', '', false, true, false, false, $callback);

# 阻塞队列,做监听
while ($channel->is_open()) {
    $channel->wait();
}

basic_consume 参数说明:

  • 队列名
  • 消费者标签
  • AMQP标准
  • 是否自动应答 ack true 自动应答,false应答
  • 是否排他
  • ?
  • 回调函数

2.工作模式

python-two.png

它由一个生产者发送在队列中,work队列会分配消息给不同的消费者,让每个消费者接收到不同的消息。

工作模式的场景特别适合集群模式的异步处理,最大程度发挥每一台服务器的性能。

3.订阅模式

python-three.png

从订阅模式开始就使用了交换机,订阅模式使用了广播类型的交换机,它会让每个队列的消息都是一样的。

生产者把消息发送给交换机,交换机把消息发送给和它绑定的队列,让消费者来消费,需要强调的是绑定的队列获得的消息是一模一样的,订阅模式就是让所有的消费者获得相同的消息。

订阅模式使用场景,天气、微博的订阅,收费文章的订阅等等。

生产者实现:

$channel->exchange_declare('logs', 'fanout', false, false, false);
# 绑定交换机和队列
$channel->queue_bind($queue_name, 'logs');

交换机参数详解:

  • 交换机名
  • 交换机类型
  • 检查是否存在
  • 是否持久化
  • 是否自动删除
$channel->basic_publish($msg, '这里是交换机的名字', $queueName);

消费者和生产者一样,先绑定交换机:

4.路由模式

python-four.png

路由模式使用direct定向类型的交换机,生产者发送一个消息到交换机,交换机根据发送来的路由键发送到相匹配的队列中,来和队列绑定的消费者进行消费。

订阅模式和路由模式的区别,订阅模式无条件的把消息发送给所有的消费者,每一个消费者收到的消息都是一样的,而路由模式对消息进行筛选发送给对应的消费者队列。

5.主题模式

python-five.png

主题模式采用的事topic的交换机,通过通配符进行匹配,通配符主要有*#

6.RPC模式

RabbitMQ的RPC模式,支持生产者和消费者不在同一个系统中,即允许远程调用的情况。通常,消费者作为服务端,放置在远程的系统中,提供接口,生产者调用接口,并发送消息。

RPC模式是一种远程调用的模式,因为需要http请求,因此速度比系统内部调用慢。而且rpc模式下,通常不易区分哪些是来自外部的请求,哪些是内部的请求,导致整体速度较慢。因此,不能滥用rpc模式。

最后

后面的3个模式不做详细的代码讲解了,可以看参考官网,实现起来都是差不多的。

  • 官网:http://www.rabbitmq.com/getstarted.html

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

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

相关文章

SSM框架学习-bean实例化

实例化bean的三种方式 1. 构造方法(常用) Spring创建bean调用的是无参的构造方法,且无论该无参构造方法是公有还是私有的,都可以调用(底层实现原理为反射) 2. 静态工厂(了解) 要配置…

【论文阅读-Low-code LLM】使用LLM进行可视化编程

Low-code LLM: Visual Programming over LLMs link: https://arxiv.org/abs/2304.08103 repository: https://github.com/microsoft/TaskMatrix/tree/main/LowCodeLLM 摘要 大规模预训练模型(LLMs)在解决困难问题仍具有很大的挑战。这篇文章提出了可以…

lua | 数据类型与变量

目录 一、数据类型 8个基本类型 1.nil(空) 2.boolean(布尔) 3.number(数字) 4.string(字符串) 5.table(表 ) 6.function(函数) 7.thread(线程) 8.u…

FIR滤波

参考来源: https://www.zhihu.com/question/323353814 本节主要围绕以下几个问题进行描述: 什么是FIR滤波器时域的卷积频域的相乘 关于FIR FIR滤波就是在时域上卷积的过程。将含噪声信号与低通滤波器的傅里叶逆变换值进行卷积,这个过程就是…

29 - 打家劫舍问题

文章目录 1. 打家劫舍I2. 打家劫舍II3. 打家劫舍III(1) 暴力递归超时(2) 记忆化搜索超时(3) 动态规划 1. 打家劫舍I 动态规划&#xff1a; dp[i] max(dp[i - 2] nums[i], dp[i - 1]); class Solution { public:int rob(vector<int>& nums) {if(nums.size() 1) re…

密码学:分组密码.(块密码:是一种对称密码算法)

密码学&#xff1a;分组密码. 分组加密(Block Cipher) 又称为分块加密或块密码&#xff0c;是一种对称密码算法&#xff0c;这类算法将明文分成多个等长的块 (Block) &#xff0c;使用确定的算法和对称密钥对每组分别加密或解密。分组加密是极其重要的加密体制&#xff0c;如D…

CE游戏特例说明

1.CE修改游戏特例说明 模拟器游戏不能直接修改游戏的程序代码&#xff08;即不能直接使用代码注入的手段修改code段代码&#xff09;&#xff0c;因为游戏并非使用平台语言所写&#xff0c;只有模拟器是使用平台语言写的&#xff0c;即壳是汇编写的&#xff0c;壳用来翻译跨平台…

设计模式 -- 中介者模式

前言 月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂) 央是一片海洋,海乃百川,代表着一块海绵(吸纳万物) 泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出) 月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容 希望大家一起坚持这个过程,也同…

瑞芯微RK3568开发板在智慧交通行业中的应用方案

智能交通安全监测系统是通过利用高性能处理器和先进的图像处理算法&#xff0c;实现对交通场景的实时监测、分析和预警&#xff0c;以提高交通安全水平。以下是基于RK3568处理器的智能交通安全监测系统产品的应用方案&#xff1a; 视频采集与处理&#xff1a; 使用RK3568处理器…

验证码短信 API 接入指南:Java 语言示例代码

短信验证码是一种通过短信发送的验证码&#xff0c;通常用于验证用户的身份、保障账户安全和防止恶意攻击等。短信验证码已经成为现代社会中不可或缺的一部分&#xff0c;广泛应用于各种场景&#xff0c;包括用户注册和登录、找回密码等等。 为了满足企业在账户安全验证和业务…

(详解)Object.keys() Object.values() Object.entries()

目录 一、Object.keys(obj) 二、Object.values() 三、Object.entries() 一、Object.keys(obj) 参数&#xff1a;要返回其枚举自身属性的对象返回值&#xff1a;一个表示给定对象的所有可枚举属性的字符串数组 处理对象&#xff0c;返回可枚举的属性数组 let person {name:…

【机器学习实战】Python基于K均值K-means进行聚类(九)

文章目录 1 前言1.1 K-means的介绍1.2 K-means的应用 2 demo实战演示2.1 导入函数2.2 创建数据2.3 拟合聚类2.4 查看结果 3 使用高级技术评估集群性能*3.1 导入函数3.2 整合数据3.3 计算 4 讨论 1 前言 1.1 K-means的介绍 K均值&#xff08;K-means&#xff09;是一种基于距离…

改写句子的软件有哪些-免费改写文章的软件

改写句子的软件 改写句子的软件是一种广泛应用于文字处理的工具&#xff0c;其主要作用是通过对原文中的语言结构和表述方式进行调整和优化&#xff0c;以改进文章的质量和可读性。改写句子的软件广泛用于新闻报道、科学文章、学术论文、书籍等各类文本材料中&#xff0c;旨在…

Elasticsearch的索引库和文档操作、RestClient的索引库和文档操作

一、Elasticsearch Linux系统通过Docker安装Elasticsearch、部署kibana 1.Elasticsearch Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎。Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elasticsearch 中。Kibana 使您能够以交互方式探索…

梅果提取物激增2782%?因字成分崛起|3月功效成分TOP100

全文速览 全文字数&#xff1a;6015字 阅读时长&#xff1a;8-12分钟 1.目前已有11款新原料成分进入监测期&#xff0c;三月新原料备案占比达27.1%。 2.天赐高新成为仅次于美国路博润的全球第二大卡波姆供应商&#xff0c;市占率将近两成。 3.氨基酸洗面奶凭多重功效替代皂…

Flink Dashboard的数据监控功能

一、数据反压 1.1 数据反压是啥 数据反压是在实时数据处理中&#xff0c;数据处理流的某个节点上游产生数据的速度大于该节点处理数据速度&#xff0c;导致数据堆积&#xff0c;从该节点向上游传递&#xff0c;一直到数据源&#xff0c;并降低数据源的摄入速度。导致数据反压…

如何远程内网电脑

要远程访问内联网计算机&#xff0c;您需要遵循以下一般步骤&#xff1a; 连接到与目标计算机相同的局域网 (LAN)。 这可能涉及到现场或使用 VPN 远程连接到 LAN。 获取目标计算机的 IP 地址或网络名称。 确保在目标计算机上启用了远程桌面访问。 使用远程桌面软件与目标计…

ASP.NET Core 8 中身份验证的改进

ASP.NET Core 团队正在改进 .NET 8 中的身份验证、授权和身份管理(统称为“身份验证”)。新的 APIs 将使自定义用户登录和身份管理体验变得更加容易。新的端点将在没有外部依赖的单页应用程序(SPA)中启用基于令牌的身份验证和授权。我们还将改进我们的指引和文档&#xff0c;使…

数据结构绪论

数据结构绪论 1.数据结构 数据结构 数据结构是相互之间存在一种或多种特定关系的数据元素的集合。数据结构是一门研究非数值计算的程序设计问题中的操作对象&#xff0c;以及他们之间的关系和操作等相关问题的学科。 数据 数据:是描述客观事物的符号&#xff0c;是计算机中可以…

Dtop环球嘉年华全球Web3.0分布式私域电商生态发展峰会圆满举办

5月7日,Dtop环球嘉年华全球Web3.0分布式跨境私域电商生态发展峰会暨战略合作备忘录签署仪式在马来西亚首都吉隆坡隆重举办。此次峰会汇集了Dtop环球嘉年华韩国、新加坡、澳洲、泰国、印尼等国家的社区联合发起人,环球自治商学院地区代表及来自Dtop环球嘉年华不同国家的粉丝用户…