什么是消息中间件?
MQ(message queue),是一种跨进程的通信机制,用于上下游传递消息,本质是个队列,只不过队列中存放的内容是message。
消息中间件的作用?
流量削峰:
假如一个程序的处理能力有限只能处理1W的请求,1W的之内都能即时响应,由于活动2W用户请求,不能放弃掉1W用户,所以消息可以到消息队列,只不过处理用户下单的时间比之前长。
应用解耦:

通过消息中间件MQ,即使B,C,D服务出现问题,也不会影响A。
异步处理:
有些服务间调用是异步的,例如A服务调用B服务,B服务需要花费很长时间执行,但A服务需要知道 B 什么时候可以执行完。
以前解决的方式:
- A服务过一段时间去调用B服务的查询api查询,看B服务是否执行完。
- A服务提供一个callback api,B服务执行完之后调用api通知A服务。
现在:使用使用消息中间件可以很方便解决这个问题。

常用地消息中间件有那些?
- ActiveMQ
- Kafka
- RocketMQ
- RabbitMQ
ActiveMQ:ActiveMQ是apache软件基金会所研发的开放源代码消息中间件。
优点:单机吞吐量万级,时效性ms级,可用性高,基于主从架构实现高可用性,消息可靠性:较低的概率丢失数据。
缺点:官方社区现在对ActiveMQ 5.x维护越来越少,高吞吐量场景较少使用。
Kafka:是apache软件基金会开发的一个开源流处理平台,Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。目的是通过hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。
优点:
- 性能卓越,单机写入TPS约在百万条/秒,最大的优点就是吞吐量高。
- 时效性ms级可用性非常高。
- kafka是分布式的,一个数据多个副本,少数机器宕机,不会丢失数据,不会导致不可用。
- 消费者采用 Pull方式获取消息, 消息有序, 通过控制能够保证所有消息被消费且仅被消费一次。
- 有优秀的第三方Kafka Web管理界面 Kafka-Manager。
- 在日志领域比较成熟,被多家公司和多个开源项目使用。
缺点:功能较为简单,主要支持简单的MQ功能,在大数据领域的实时计算以及日志采集被大规模使用,社区更新较慢。
RocketMq:RocketMQ出自阿里巴巴的开源产品,用Java语言实现,在设计时参考了Kafka,并做出了自己的一些改进。被阿里巴巴广泛应用在订单,交易,充值,流计算,消息推送,日志流式处理,binglog分发等场景。
优点:
- 单机吞吐量十万级,可用性非常高。
- 分布式架构,消息可以做到0丢失。
- MQ功能较为完善,还是分布式的,扩展性好。
- 支持10亿级别的消息堆积,不会因为堆叠导致性能下降,源码是Java的。
缺点:支持的客户端语言不多,目前是Java及C++,其中C++不成熟,社区活动一般,没有在MQ核心中去实现JMS等接口,有些系统要迁移要修改大量代码。
RabbitMq:2007年发布,是一个在AMQP(高级消息队列协议)基础上完成的,可复用的企业消息系统,是当前最主流的消息中间件之一。
优点:
- 由于erlang语言的高并发特性,性能较好,吞吐量到万级
- MQ功能比较完备,健壮,稳定,易用,跨平台
- 支持多种语言例如:Python,Ruby,.NET,Java,JMS,C,PHP,ActionScript,XMPP,STOMP等
- 支持 AJAX 文档齐全;开源提供的管理界面非常棒,用起来很好用,社区活跃度高;更新频率相当高
缺点:商业版需要收费,学习成本较高
消息中间件的选择?
大型项目:RocketMq
日志收集(就是跟大数据量打交道):kafka
小/中型项目:RabbitMQ
高并发:kafka = RocketMQ > RabbitMQ
吞吐量:kafka = RocketMQ > RabbitMQ
消息持久化:RabbitMQ、RocketMQ、kafka都支持持久化
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步