RabbitMQ

什么是MQ?

MQ是消息队列(Message Queue)的缩写,是一种应用程序之间的通信方法。它是一个保存消息的容器,本质上是个队列。消息是指在应用之间传送的数据,可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。

MQ的主要特点是异步处理,主要目的是减少请求响应时间,实现非核心流程异步化,提高系统响应性能。

常见的消息队列

  • ActiveMQ
  • RabbitMQ
  • ZeroMQ
  • Kafka
  • RocketMQ

什么是rabbitmq?

RabbitMQ是一款使用Erlang语言开发的,实现AMQP (高级消息队列协议)的开源消息中间件。它是一个由Erlang语言开发的AMQP的开源实现。

RabbitMQ的主要特点是可靠性、灵活的分发消息策略和支持集群。

优点:

  1. 高可靠性:RabbitMQ支持多种消息持久化方式,如内存、磁盘等,保证消息不会丢失。同时,它也支持消息的死信队列和消息的优先级设置,可以有效避免消息丢失和重复处理的问题。
  2. 高可用性:RabbitMQ采用集群的方式部署,可以实现负载均衡和故障转移,保证系统的高可用性。
  3. 高性能:RabbitMQ采用Erlang语言编写,具有出色的性能表现。同时,它还支持多种交换机类型和路由策略,可以根据实际需求进行优化。
  4. 易扩展性:RabbitMQ支持插件机制,可以通过插件来扩展其功能。同时,它还支持集群、镜像队列等高级特性,可以满足不同场景下的需求。
  5. 灵活性:RabbitMQ支持多种协议,如AMQP、STOMP等,可以与其他系统集成。同时,它还支持多种编程语言的开发,如Java、Python等,可以满足不同开发人员的需求。

缺点:

  1. 系统可用性降低:系统引入的外部依赖增多,系统的稳定性就会变差。一旦MQ宕机,就会对业务产生影响。需要考虑如何保证MQ的高可用。
  2. 系统的复杂度提高:引入MQ后系统的复杂度会大大提高。以前服务之间可以进行同步的服务调用,引入MQ后,会变成异步调用,数据链路会变得更复杂。并且还会带来一系列的问题。如如何保证消息不会丢失?不会被重复调用?怎么保证消息的顺序性?
  3. 并发量大时性能下降:如果有大量的消息堆积在队列中,性能会急剧下降。