网站首页 > 技术文章 正文
消息中间件,又叫MQ,这几年逐渐火爆起来,尤其擅长处理异构系统间的消息传递和对突发流量的削峰限流,而RabbitMQ是其中最典型的代表。
一、RabbitMQ 简介
RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Java、C、PHP等,支持AJAX。可用于在分布式系统中存储转发消息,RabbitMQ有如下特点,
- 可靠性,使用一些机制来保证可靠性,如持久化、传输确认、发布确认。
- 灵活的路由,在消息进入队列之前,通过 Exchange 来路由消息的。
- 消息集群,多个服务器可以组成一个集群,形成一个逻辑 Broker 。
- 高可用,队列可以在集群中的机器上进行镜像,在部分节点出问题的情况下队列仍然可用。
- 多协议,支持多种消息队列协议,比如 STOMP、MQTT 等。
二、RabbitMQ 持久化机制
RabbitMQ的持久化主要是为了防止消息丢失,主要分两类持久化,
- 交换机、队列持久化:持久化交换机和队列,设置交换机和队列的durable属性为ture。
- 消息持久化:持久化消息本身,设置消息的“投递模式”属性设置为 2 (delivery_mode=2)。
RabbitMQ 会把持久化的数据写入磁盘上的一个持久化日志文件,在做数据恢复时,从磁盘读取持久化的数据重建。当发布一条持久化的消息到持久化的交换机上时,RabbitMQ 会在消息提交到日志文件后才发送响应。如果RabbitMQ重启,服务器会自动重建交换机和队列,重播持久性日志文件中的消息到合适的队列或者交换机上。
三、对 RabbitMQ 持久化机制的几点看法
有时候因断电等原因,重启RabbitMQ后,队列和交换器都会丢失(随同里面的消息)。而RabbitMQ的消息持久化,极大的避免了这种情况的发生,给我们了一个很好的选择。
但是有利就有弊,这里我主要谈下缺点:
首先,消息持久化对RabbitMQ的性能有较大影响,写入磁盘要比写入内存慢很多,而且会极大的减少RabbitMQ服务器每秒可处理的消息总数,导致消息吞度量降低至少10倍的情况并不少见。
其次,持久化消息在RabbitMQ内建集群环境中工作的并不好,实际上集群上的队列均匀分布在各个节点上而且没有冗余,如果运行a队列的节点崩溃了,那么直到节点恢复前,这个队列就从整个集群消失了,而且这个节点上的所有队列不可用,而且持久化队列也无法重建。
最后要注意一点,如果原交换器或者队列是非持久的,一定要删除后才可重新创建持久化或者也可以创建其他名称的交换器或者队列。
猜你喜欢
- 2024-10-02 「2021最新版」RabbitMQ面试题总结,每道题都很经典
- 2024-10-02 RabbitMQ如何保证消息不丢失 运城丢失女孩最新消息
- 2024-10-02 用 RabbitMQ 延迟队列,实现消息延迟推送
- 2024-10-02 RabbitMQ如何保证消息不丢失? 山西丢失孩子最新消息
- 2024-10-02 超详细的RabbitMQ入门,看这篇就够了
- 2024-10-02 3分钟阅读技术干货,一步一步的理解RabbitMQ
- 2024-10-02 周日福利--消息队列学习必备宝典(RabbitMQ实战指南)
- 2024-10-02 RabbitMQ 如何实现数据100%不丢失
- 2024-10-02 C# 消息队列之RabbitMQ rabbitmq消息队列类型
- 2024-10-02 RabbitMQ 持久化和权重分配消息 rabbitmq的持久化和确认机制
你 发表评论:
欢迎- 02-26Docker目录说明之 /var/lib/docker
- 02-26家用nas最常用的docker容器及部署方法
- 02-26Docker快速上手笔记
- 02-26怎样在Python中操作Docker容器?
- 02-26手把手教你搭建LLM模型知识库,开启AI智慧大门
- 02-26Docker容器是个啥?和VM有什么区别?
- 02-26Docker入门指南:从新手到容器大师
- 02-26带你一文搞懂 Docker
- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)