消息中间件
    消息:传递的消息,系统与系统之间通讯传递的信息
    中间件: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