消息中间件
消息:传递的消息,系统与系统之间通讯传递的信息
中间件:redis就是一个数据存储的中间件,独立于系统之外的一个应用都可以叫做中间件
消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信
常见角色:
生产者
消费者
中间件
生产者:发送消息
消费者:获取接收消息,并处理消息
**
应用场景:
异步处理:
将耗时较长的业务逻辑,进行异步处理,比如注册之后短信,邮箱的发送
应用解耦:
通过上、下游业务系统的松耦合设计
流量削峰:
应用场景: 秒杀活动
消息通讯:
消息通讯指,消息队列一般都内置了高效的通信机制,因此也可以用于消息通讯,比如点对点消息队列,或者聊天室
RocketMQ是一款分布式、队列模型的消息中间件,具有以下特点
能够保证严格的消息顺序
提供丰富的消息拉取模式
高效的订阅者水平扩展能力
实时的消息订阅机制
亿级消息堆积能力
RocketMQ角色:
Name Server:
类似于zookeeper一样的注册中心。
用来记录维护Topic和Broker的信息,以及监控Broker的运行状态
底层由netty实现,提供了路由管理、服务注册、服务发现的功能,是一个无状态节点
nameserver是一个服务发现者,集群中各个角色都需要定时向nameserver上报自己的状态,以便互相发现彼此,超时不上报的话,nameserver会把它从列表中剔除
nameserver可以部署多个,当多个nameserver存在的时候其他角色同时向他们上报信息,以保证高可用
nameserver集群键互不通信,没有主备的概念
nameserver内存式存储,nameserver中的broker、topic等信息默认不是持久化,所以他是无状态节点
Broker
理解成MQ本身
broker主要用于producer和consumer发送和接收消息
broker会定时nameserver提交自己的信息
是消息中间件的消息存储、转发服务器
每个Broker与Name Server集群中的所有节点建立长连接,定时(每隔30s)注册Topic信息到所有Name Server。Name Server定时(每隔10s)扫描所有存活broker的连接,如果Name Server超过2分钟没有收到心跳,则Name Server断开与Broker的连接。
Producer
消息的生产者
producer与nameserver集群中的其中一个节点建立场链接,定期充那么server获取topic路由信息,并向提供农topic服务的broker建立长连接
Consumer
消息的消费者
Topic
主体,消息类型
Queue
一个 topic下可以设置多个queue(消息队列),默认4个队列
groupName
