这是我参与「第五届青训营 」笔记创作活动的的第12天
本节导航
- 消息队列定义
- 消息队列
消息队列是什么
- 消息(Message)是指在应用之间传送的数据,消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。 消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,有消息系统来确保信息的可靠专递,消息发布者只管把消息发布到MQ中而不管谁来取,消息使用者只管从MQ中取消息而不管谁发布的,这样发布者和使用者都不用知道对方的存在。
消息队列
Kafka
kafka使用场景,业务日志、用户行为数据、Metrics数据
基本概念:Message(消息),Producer(生产者)、Cluster(集群)、Consumer(消费者)、Topic(主题)、Partition(分区)
RabbitMQ
RabbitMQ 2007年发布,是一个在AMQP(高级消息队列协议)基础上完成的,可复用的企业消息系统,是当前最主流的消息中间件之一。
-
RabbitMQ优点
- 由于erla ng语言的特性,mq 性能较好,高并发;
- 吞吐量到万级,MQ功能比较完备
- 健壮、稳定、易用、跨平台、支持多种语言、文档齐全;
- 开源提供的管理界面非常棒,用起来很好用
- 社区活跃度高;
-
RabbitMQ缺点
- erlang开发,很难去看懂源码,基本职能依赖于开源社区的快速维护和修复bug,不利于做二次开发和维护。
- RabbitMQ确实吞吐量会低一些,这是因为他做的实现机制比较重。
- 需要学习比较复杂的接口和协议,学习和维护成本较高。
RocketMQ
- 概念介绍
RocketMQ作为一款纯java、分布式、队列模型的开源消息中间件,支持事务消息、顺序消息、批量消息、定时消息、消息回溯等。
-
核心组成
- NameServer:相当于注册中心的角色,各个角色的机器都要定时向NameServer上报自己的状态,如果超时未上报,NameServer会认为某个机器出现故障不可用了,从而将这个机器从可用列表中删除。
- Broker:负责消息的存储和转发
- Producer:生产者通过MQ的负载均衡模块选择相应的Broker集群队列进行消息投递,投递的过程支持快速失败且低延迟,RocketMQ中的消息生产者都是以组的形式出现的。生产者组是同一类生产者的集合,这类生产者发送相同的Topic类型。
- Consumer:RocketMQ中的消息消费者都是以消费者组的形式出现的,消费者组是同一类消费者的集合,消费的是同一个Topic类型。消费者组使得消息消费实现了负载均衡和容错。