IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> RabbitMQ基础知识总结 -> 正文阅读

[大数据]RabbitMQ基础知识总结

RabbitMQ基础知识总结

一、六大应用模式
1、简单模式
在这里插入图片描述
2、工作队列
在这里插入图片描述
3、远程过程调用(RPC)
在这里插入图片描述
图解流程说明:
(1)当客户端启动的时候,作为生产者的客户端将创建一个匿名独享的回调队列。
(2)在 RPC 请求中,客户端(生产者)将带有两个属性的消息(一个是设置回调队列的 reply_to 属性,另一个是设置唯一值的 correlation_id 属性)发送到一个RPC_QUEUE队列中。
(3)服务器(此时服务器端是消费者)监听这个RPC_QUEUE队列。当这个队列中有请求(消息)出现的时候,服务器将接收并处理完这个请求(消息),并且将处理结果扔进 reply_to 字段指定的队列。
(4)客户端(这时候客户端就是消费者了)监听回调队列里的数据。当有消息出现的时候,它会检查 correlation_id 属性。如果此属性的值与请求匹配,则作为一次正常的服务器响应去处理了

四种Exchanges类型:direct, topic, headers and fanout
4、发布订阅(交换机类型:fanout)
在这里插入图片描述
5、路由(交换机类型:direct)
在这里插入图片描述
6、主题(交换机类型:topic)
在这里插入图片描述
二、RabbitMQ的消息确认机制
1、生产端发送消息确认:分为事务和实现confirm机制。不过一般不使用事务,性能消耗太大。
2、消费端消费确认:
消费端消息的确认分为:自动确认(默认)、手动确认、不确认
AcknowledgeMode.NONE:不确认
AcknowledgeMode.AUTO:自动确认
AcknowledgeMode.MANUAL:手动确认
(1)消费成功手动确认方法:
void basicAck(long deliveryTag, boolean multiple) throws IOException;
deliveryTag:该消息的index
multiple:是否批量确认。true:将一次性ack所有小于deliveryTag的消息。
消费者成功处理消息后,手动调用channel.basicAck(message.getMessageProperties().getDeliveryTag(), false)方法对消息进行消费确认。

(2)消费失败手动确认方法:
void basicNack(long deliveryTag, boolean multiple, boolean requeue) throws IOException;
deliveryTag:该消息的index。
multiple:是否批量. true:将一次性拒绝所有小于deliveryTag的消息。
requeue:被拒绝的是否重新入队列。

void basicReject(long deliveryTag, boolean requeue) throws IOException;
deliveryTag:该消息的index。
requeue:被拒绝的是否重新入队列。
channel.basicNack 方法与 channel.basicReject 方法区别在于basicNack可以批量拒绝多条消息,而basicReject一次只能拒绝一条消息。
三、消费端消费模式
push:broker主动将消息推送给订阅队列的消费者
pull:消费者调用channel.basicGet方法,主动从队列中拉取消息
两种模式都可进行消息确认设置:自动确认(autoAck为true)、手动确认(autoAck为false),当这个参数为true时, RabbitMQ服务器在发送消息到socket插口后, 就会将消息移除,consumer不会对消息进行确认。

两种模式的优缺点:

  • push模式的优缺点
    push优点:
    服务端主动推送给客户端,及时性很高
    push缺点:
    1.当客户端消费能力远低于服务端生产能力,那么一旦服务端推送大量消息到客户端时,就会导致客户端消息堆积,处理缓慢,甚至服务崩溃。(那么如何解决这个问题呢?需要mq提供流控制,也就是依据客户端消费能力做流控。比如rabbitmq设置Qos,限制消费数量。)
    2.服务端需要维护每次传输状态,以防消息传递失败进行重试。
  • pull模式的优缺点
    pull模式优点:
    1.客户端可以依据自己的消费能力进行消费
    2.传输失败时不需要重试,反正数据还在服务端。
    pull模式缺点:
    1.主动到服务端拉取消息。这个拉取消息的间隔需要设置好,不太好设置。间隔太短,对服务器请求压力过大。间隔时间过长,那么必然会造成一部分数据的延迟。(也有一些解决方案,间隔时间指数级增长,5ms,10ms,20ms,40ms,80ms。。。然后再回到5ms,一定程度上解决,但是如果在41ms时来了数据,那么到80ms就有40ms左右的时间延迟。另外在腾讯的CMQ里有一套长轮询的解决方案,就是取数据时要是没有数据可消费,不是直接返回而是连接等待,一直有数据来了再返回)
  • push和pull模式不同适用场景 对于服务端生产消息数据比较大时,而消费端处理比较复杂,消费能力相对较低时,这种情况就适用pull模式。
    对于数据实时性要求高的场景,就比较适用与push模式。

当使用push并且为手动确认方式时,可以使用basicQos让RabbitMQ一次投递多个消息到consumer, 实现消息的预取(prefetch)。如果consumer设置了自动确认, basicQos API不会起作用, 其没有任何意义。具体看博客 RabbitMQ的consumer预取(prefetch)行为.

本博客参考文章:
Rabbitmq六大应用模式.
Rabbitmq的六大工作模式机制.
RabbitMQ的消息确认机制.
消息中间件push和pull模式.
RabbitMQ的consumer预取(prefetch)行为.

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-07-28 07:53:02  更:2021-07-28 07:54:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 21:55:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码