RabbitMQ学习笔记(六、RabbitMQ进阶)
目录:
- 性能
- 存储机制
- 内存及磁盘告警
性能:
影响RabbitMQ性能的因素有很多,主要的分为硬件性能与软件性能。
)硬件性能:如网络、内存、CPU等等。
)软件性能:消息持久化、消息确认、路由算法与绑定规则、投递消息等等。
1、消息持久化:持久化会写入磁盘,多一次IO操作,设置非持久化可提升性能。
2、消息确认:消费者订阅队列时,设置自动确认也可以提升性能。
3、路由算法与绑定规则:fanout,只要绑定了交换器就可以匹配到,匹配规则少,性能肯定是绑定规则中最佳的;direct,除了交换器还需要匹配路由键,性能次之;topic,最复杂的匹配规则,相对其它两个性能最差。
4、投递消息
存储机制:
)队列结构:
消息通常由两部分组成,rabbit_amqqueue_process和backing_queue。
1、rabbit_amqqueue_process:负责协议相关的消息处理,即接受生产者发布的消息、消息的投递、处理消息的确认等等。
2、backing_queue:消息存储的具体形式和引擎,并向rabbit_amqqueue_process提供相关接口。
)消息在队列中的状态:
1、alpha:消息内容、索引全在内存中。
2、beta:内容在磁盘,索引在内存。
3、gamma:内容在磁盘,索引在内存和磁盘都有(只有持久化的消息才会处理此状态)。
4、delta:内容和索引全在磁盘中。
内存及磁盘告警:
)内存:
RabbitMQ内存阀值默认为40%,可以通过修改rabbitmq.conf文件(/etc/rabbitmq/rabbitmq.conf)来配置内存阀值。
# 内存阀值
[{rabbit, [{vm_memory_high_watermark, 0.4}]}]
# 内存阀值绝对值,单位B
[{rabbit, [{vm_memory_high_watermark, {absolute, 104857600}}]}]
# 内存阀值绝对值,自定义单位
[{rabbit, [{vm_memory_high_watermark, {absolute, "1000MB"}}]}]
当然你也可以通过命令
# 对应rabbitmqctl命令(fraction对应配置中的0.4):
rabbitmqctl set_vm_memory_high_watermark {fraction}
# rabbitmqctl命令指定内存阈值绝对值
rabbitmqctl set_vm_memory_high_watermark absolute {memory_limit)
)磁盘:
# rabbitmq.config配置文件命令 [{rabbit, [{disk_free_limit, "1GB"}]}] # 设置磁盘阈值的绝对值 rabbitmqctl set_disk_free_limit {disk_limit} # 设置机器内存大小与磁盘阈值的比值 rabbitmqctl set_disk_free__limit_mem_relative {fraction}