消息队列原理与实战|青训营笔记

61 阅读3分钟

image.png

这是我参与「第五届青训营 」笔记创作活动的的第12天

本节导航

  • 消息队列定义
  • 消息队列

消息队列是什么

  • 消息(Message)是指在应用之间传送的数据,消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。 消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,有消息系统来确保信息的可靠专递,消息发布者只管把消息发布到MQ中而不管谁来取,消息使用者只管从MQ中取消息而不管谁发布的,这样发布者和使用者都不用知道对方的存在。

消息队列

Kafka

kafka使用场景,业务日志、用户行为数据、Metrics数据

基本概念:Message(消息),Producer(生产者)、Cluster(集群)、Consumer(消费者)、Topic(主题)、Partition(分区)

image.png

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类型。消费者组使得消息消费实现了负载均衡和容错。