RabbitMQ
什么是MQ?
MQ是消息队列(Message Queue)的缩写,是一种应用程序之间的通信方法。它是一个保存消息的容器,本质上是个队列。消息是指在应用之间传送的数据,可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。
MQ的主要特点是异步处理,主要目的是减少请求响应时间,实现非核心流程异步化,提高系统响应性能。
常见的消息队列
- ActiveMQ
- RabbitMQ
- ZeroMQ
- Kafka
- RocketMQ
什么是rabbitmq?
RabbitMQ是一款使用Erlang语言开发的,实现AMQP (高级消息队列协议)的开源消息中间件。它是一个由Erlang语言开发的AMQP的开源实现。
RabbitMQ的主要特点是可靠性、灵活的分发消息策略和支持集群。
优点:
- 高可靠性:RabbitMQ支持多种消息持久化方式,如内存、磁盘等,保证消息不会丢失。同时,它也支持消息的死信队列和消息的优先级设置,可以有效避免消息丢失和重复处理的问题。
- 高可用性:RabbitMQ采用集群的方式部署,可以实现负载均衡和故障转移,保证系统的高可用性。
- 高性能:RabbitMQ采用Erlang语言编写,具有出色的性能表现。同时,它还支持多种交换机类型和路由策略,可以根据实际需求进行优化。
- 易扩展性:RabbitMQ支持插件机制,可以通过插件来扩展其功能。同时,它还支持集群、镜像队列等高级特性,可以满足不同场景下的需求。
- 灵活性:RabbitMQ支持多种协议,如AMQP、STOMP等,可以与其他系统集成。同时,它还支持多种编程语言的开发,如Java、Python等,可以满足不同开发人员的需求。
缺点:
- 系统可用性降低:系统引入的外部依赖增多,系统的稳定性就会变差。一旦MQ宕机,就会对业务产生影响。需要考虑如何保证MQ的高可用。
- 系统的复杂度提高:引入MQ后系统的复杂度会大大提高。以前服务之间可以进行同步的服务调用,引入MQ后,会变成异步调用,数据链路会变得更复杂。并且还会带来一系列的问题。如如何保证消息不会丢失?不会被重复调用?怎么保证消息的顺序性?
- 并发量大时性能下降:如果有大量的消息堆积在队列中,性能会急剧下降。