RabbitMQ的优缺点有哪些?在日常运维中常见的问题与处理措施是什么?
RabbitMQ在OpenStack中的位置如图Q58-1所示。
一、RabbitMQ的优点
(1)应用解耦,提高系统的容错率和可维护性。
(2)异步提速,提升用户体验和系统吞吐量。
(3)削峰填谷,提高系统稳定性。
二、RabbitMQ的缺点
(1)系统可用性降低,系统引入的外部依赖越多,系统稳定性越差。
(2)系统复杂度提高,通过MQ进行异步调用,影响消息传递的顺序。
(3)消息数据处理存在一致性问题。
图Q58-1 RabbitMQ在OpenStack中的位置
三、日常运维常见问题
(一)如何保证消息尽量发送成功
问题描述:如果没有启动消费者,就重启了 RabbitMQ 服务,则队列和消息会丢失。
解决方案:针对这个问题,有以下几种机制可以解决。
(1)生产者确认。
(2)持久化。
(3)手动ACK。
(二)如何进行消息持久化
所谓持久化,就是 RabbitMQ 将内存中的数据(如交换机、队列、消息等)固化到磁盘,以防止在异常情况发生时数据丢失。
RabbitMQ持久化分为:
(1)交换机持久化;
(2)队列持久化;
(3)消息持久化。
(三)如何保证消息被正确消费
为了保证消息被消费者成功消费,RabbitMQ 提供了消息确认机制,主要通过显示 ACK 模式来实现。在默认情况下,RabbitMQ 会自动把发送出去的消息置为确认,然后从内存(或磁盘)中删除。