rabbitmq
文章平均质量分 88
陈猿解码
这个作者很懒,什么都没留下…
展开
-
RabbitMQ——镜像队列问题(一)
最近在使用镜像队列的过程中遇到了一些坑,通过阅读相关源码,大量的测试,不敢说对其中的原理掌握得非常透彻, 但基本能分析定位问题的原因,并且能自圆其说。这里整理总结下, 方便后续的回溯。欢...原创 2019-10-23 23:48:54 · 2399 阅读 · 1 评论 -
RabbitMQ——调优参数
【前言】前面几篇文章讲述了rabbitmq消息存储的相关原理,也提到了有些参数可以进行配置。这些配置参数的微调在不同的场景中会有不同的效果。本文对其中一些参数进行说明,同时以实测数据结合...原创 2019-09-10 15:33:36 · 3159 阅读 · 0 评论 -
RabbitMQ——流控
【概述】rabbitmq是采用erlang开发的,而erlang开发的程序其内部通常由成千上万个进程组成。每个进程都有自己的邮箱,进程与进程之间通过消息投递来进行通信(发送端将消息投递到...原创 2019-08-27 09:46:04 · 1373 阅读 · 0 评论 -
Rabbitmq——消息存储调度
【概述】消息、队列有持久化与非持久化的属性,持久化的消息会在磁盘上存储,而非持久化的消息在内存中存储。然而消息并非固定按照持久化属性仅在磁盘或内存中存储。当内存占用达到一定水位时,内存中...原创 2019-08-21 10:41:51 · 1613 阅读 · 1 评论 -
rabbitmq——索引文件的读写机制
【前言】在前面的文章中,我们讲解了索引文件的格式,里面提到了针对消息主要有publish,delivery,ack三个操作,而索引文件中主要也就是存储了消息这三个操作对应的二进制数据。那...原创 2019-08-14 13:01:03 · 881 阅读 · 0 评论 -
RabbitMQ——配置文件
3.7.0版本之前的配置文件采用经典格式,或者称之为erlang term的方式(下面统称为经典格式),其配置文件的后缀为".config",例如:[ {rabbit...原创 2019-07-21 13:51:29 · 1517 阅读 · 0 评论 -
RabbitMQ——队列消息数
背景在实际使用过程,会遇到这么些情况:生产者发送的消息数量与消费者接收的消息数量不一致。例如生产者向rabbitmq投递了100条消息,消费者只从队列中接收到了80条消息,并且当前队列中...原创 2019-07-09 11:36:06 · 3383 阅读 · 0 评论 -
RabbitMQ--索引重建
【背景】在实际使用过程中,发现有时候rabbitmq启动后,很快就能提供服务(在指定端口上侦听,客户端能正常连接到rabbitmq);而有时候则需要过一段时间才能提供服务,尤其是启动前有...原创 2019-06-19 20:57:33 · 511 阅读 · 0 评论 -
RabbitMQ——镜像队列Master故障后的处理
默认情况下,镜像队列的master出现故障时,最老的mirror会被提升为新的master。如果新提升为master的这个mirror与原有的master并未完成数据的同步,那么就会出现...原创 2019-06-13 21:04:13 · 992 阅读 · 0 评论 -
RabbitMQ——消息存储
【概述】前一篇文章中提到了消息可存储在队列索引或消息存储中,对于消息存储的方式,整体框架大概如下图所示:rabbitmq启动后针对每个vhost会启动两个进程:msg_store_per...原创 2019-05-28 21:32:45 · 1788 阅读 · 2 评论 -
RabbitMQ——队列索引文件格式
简介RabbitMQ的持久化包含两个部分:队列索引(queue index)和消息存储(message store)。队列索引负责维护消息在队列中的位置信息,以及消息的状态(消息是否投递...原创 2019-05-03 16:47:10 · 1145 阅读 · 0 评论 -
RabbitMQ——内存调优(一)
【前言】在《RabbitMQ——调优参数》一文中提到了rabbitmq相关的参数,对相关参数进行调整后测试发现在队列无堆积的情况下, 生产消费速度有明显提升;而在队列消息堆积的情况下,生...原创 2019-12-09 00:02:59 · 1881 阅读 · 0 评论 -
RabbitMQ——内存调优(二)
在上一篇文章中简单介绍了erlang运行时系统中内存分配的相关概念。那么在消息堆积的场景中,对这些参数调整,是怎样影响整体性能的呢?要分析这个问题,首先我们得估算下在队列消息堆积的情况下...原创 2019-12-14 00:39:55 · 1380 阅读 · 0 评论 -
RabbitMQ——镜像队列的数据流
【概述】rabbitmq采用了镜像队列的方式实现队列的高可用,镜像队列的使用、配置、内部实现原理网上有很多文章都有介绍,自己很久之前也曾总结过相关内容。但回过头再来看镜像队列,仍然有新的...原创 2020-04-19 00:11:20 · 547 阅读 · 0 评论 -
【RabbitMQ——再谈流控】
【前言】最近又被流控问题缠住了,不懂其中原理的总会以界面上显示为flow来说事。那界面上连接、通道的flow状态的显示到底是怎么回事?显示为flow是否就是影响或阻塞生产者的消息发送了?...原创 2020-07-05 11:11:54 · 1369 阅读 · 1 评论 -
RabbitMQ——短连接惹的祸
【前言】最近在生产环境出现了一个奇怪问题,并且该问题多次出现,问题排查过程中对一些线索大胆猜测其问题的原因,最终找了了问题的根因。这里进行总结,方便后续回顾。【问题现象】环境背景与具体的...原创 2020-04-25 21:54:40 · 2189 阅读 · 0 评论 -
rabbitmq--trace
在使用rabbitmq的过程中,难免会出现某条消息异常丢失的情况。出现这种状况的原因可能是因为生产者或消费者与rabbitmq的断链,而它们与rabbitmq又采用了不同的确认机制;也可能是因为exchange与queue之间不同的转发策略,甚至是exchange后没有queue,生产者又不感知或者没有采取相应的措施;另外rabbitmq本身的集群策略也可能导致消息的丢失。这个时候就需要rabbi原创 2018-01-12 22:07:15 · 1926 阅读 · 1 评论 -
rabbitmq--安装后的通用配置与操作
序rabbitmq的版本更新速度还是比较快的,从BUG的修复到内部实现的优化都有涉及,连命令和使用的方式也稍有变化,因此打算基于rabbitmq-3.3.5版本,重新学习下rabbitmq,并整理形成文档备忘。前言网上有很多都介绍了rabbitmq的安装与配置,然而真正在配置部署的时候还得要临时翻看下相关的文档,比如需要在一台机器上部署rabbitmq的集群时,就会不断因为端口冲突原创 2018-01-12 21:48:10 · 3179 阅读 · 0 评论 -
rabbitmq--用户管理
安装最新版本的rabbitmq(3.3.1),并启用management plugin后,使用默认的账号guest登陆管理控制台,却提示登陆失败。翻看官方的release文档后,得知由于账号guest具有所有的操作权限,并且又是默认账号,出于安全因素的考虑,guest用户只能通过localhost登陆使用,并建议修改guest用户的密码以及新建其他账号管理使用rabbitmq(该功能是在3.3原创 2018-01-12 21:41:13 · 449 阅读 · 0 评论 -
rabbitmq--prefetch count
消费者在开启acknowledge的情况下,对接收到的消息可以根据业务的需要异步对消息进行确认。然而在实际使用过程中,由于消费者自身处理能力有限,从rabbitmq获取一定数量的消息后,希望rabbitmq不再将队列中的消息推送过来,当对消息处理完后(即对消息进行了ack,并且有能力处理更多的消息)再接收来自队列的消息。在这种场景下,我们可以通过设置basic.qos信令中的prefetch_原创 2018-01-12 21:34:25 · 6350 阅读 · 0 评论 -
rabbitmq--heartbeat
heartbeat通常用来检测通信的对端是否存活(未正常关闭socket连接而异常crash)。其基本原理是检测对应的socket连接上数据的收发是否正常,如果一段时间内没有收发数据,则向对端发送一个心跳检测包,如果一段时间内没有回应则认为心跳超时,即认为对端可能异常crash了。rabbitmq也不例外,heatbeat在客户端和服务端之间用于检测对端是否正常,即客户端与服务端之间的tcp链原创 2018-01-12 21:29:34 · 966 阅读 · 0 评论 -
rabbitmq--镜像队列
1. 镜像队列的设置镜像队列的配置通过添加policy完成,policy添加的命令为:rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority]-p Vhost: 可选参数,针对指定vhost下的queue进行设置Name: policy的名称Pattern: queue的匹配模式(原创 2018-01-12 21:16:12 · 1435 阅读 · 0 评论 -
rabbitmq中消息的存储
1. 大概原理:所有队列中的消息都以append的方式写到一个文件中,当这个文件的大小超过指定的限制大小后,关闭这个文件再创建一个新的文件供消息的写入。文件名(*.rdq)从0开始然后依次累加。当某个消息被删除时,并不立即从文件中删除相关信息,而是做一些记录,当垃圾数据达到一定比例时,启动垃圾回收处理,将逻辑相邻的文件中的数据合并到一个文件中。2. 消息的读写及删除:rabbitm原创 2018-01-12 21:10:07 · 4223 阅读 · 0 评论 -
rabbitmq对network partition的处理
rabbitmq没有很好的分区容错性,因此,如果需要在广域网里使用rabbitmq集群,建议使用federation或者shovel进行替代。那么即使rabbitmq集群运行在局域网内也不能完全避免网络分区现象(network partition),例如,当路由器或者交换机出现问题,或者网口down掉时,都可能发生网络分区。那么,出现网络分区对rabbitmq集群有什么影响呢?当发生网络分区时原创 2018-01-07 12:41:17 · 1092 阅读 · 0 评论 -
RabbitMQ——最大连接数
默认情况下,rabbitmq文件句柄数设置是1024。连接数最多为829,连接数的具体计算方式为:连接数=(文件句柄数-100)*0.9,计算后的值取整再减2。例如:(1024-100)*0.9=831.6,取整831再减2得到829。真正使用时,1024可能无法满足实际需求。这个时候,一般通过ulimit来调整程序的最大文件句柄数。下图为通过ulimit将文件句柄数调整到1024...原创 2019-08-30 11:03:11 · 16807 阅读 · 0 评论 -
rabbitmq--通过rabbitmqctl创建exchange和queue
一般来说,exchange和queue都是由我们的业务程序在运行过程中连接到rabbitmq并创建的。然而也有些特殊的场景,要求业务程序在连接使用rabbitmq之前,相关的exchange和queue必须预先创建好。这个时候对于测试人员或者运维人员来说,通常的做法是在rabbitmq安装完成后,启用rabbitmq_management插件,然后在web控制台进行操作来创建exchange和qu原创 2018-01-12 22:26:36 · 14182 阅读 · 1 评论