最近几年,对MQ的使用很频繁,但从未对其进行深入研究,最近有幸接触到。因此记录下。
什么是MQ
MessageQueue消息队列简称为MQ,队列大家都不陌生,一般都是先进先出(FIFO)有先后顺序。常见的MQ有ActiveMQ、RabbitMQ、Kafka、RocketMQ。这里我们主要介绍RocketMQ。
MQ的用处
异步、削峰、解耦。MQ就是用来做这个的。
RocketMQ的四大金刚及架构
RocketMQ的路由NameServer
NameServer是一个无状态节点,可集群部署,节点之间无任何信息同步。主要功能是为整个MQ集群提供服务协调与治理,具体就是记录维护Topic、Broker的信息,及监控Broker的运行状态。
NameServer不会有频繁的读写,所以性能开销非常小,稳定性很高
RocketMQ的生产(producer)
消息发送方式有三种:
同步发送:发送者向MQ发送的消息的时候,同步等待,直到服务器返回结果
异步发送:发送者向MQ发送消息时,指定成功后的回调函数,不会等待服务器返回结果。
单向发送:发送者向MQ发送消息时,不等待结果直接返回,也不注册回调函数。
消息发送流程:
1、验证消息长度:确保运行状态下,消息符合相应规范,默认消息内容不超过4M。
2、查找主题(Topic)的主题信息:通过topic,在NameServer中查找对应的brokerAddr信息。向broker循环发送。
3、选择消息队列,可以选择是否开启broker延迟机制。
4、发送消息。
Topic创建
自动创建
手动创建
单机和集群
当用集群模式去创建topic时,集群里面每个broker的queue的数量相同,当用单个broker模式去创建topic时,每个broker的 queue数量可以不一致。