一 服务搭建细节
二 Rocket Mq 特性详解
broker 里面每个topic 都是有四个队列;
RocketMQ推荐了几种Broker集群方式,这里的Slave不可写,但可读,类似于Mysql主备方式
1. 单个Master
这是一种风险比较大的集群方式,因为一旦Borker重启或宕机期间,将会导致这个服务不可用,因此是不建议线上环境去使用的。
2. 多个Master
一个集群全部都是Master,没有Slave,它的优点和缺点如下:
优点:配置简单,单个Master宕机或者是重启维护对应用没有什么影响的,在磁盘配置为RAID10时,即使机器宕机不可恢复的情况下,消息也不会丢失(异步刷盘丢失少量消息,同步刷盘则是一条都不会丢失),性能最高
缺点:当单个Broker宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅,消息的实时性会受到影响。
3. 多Master多Slave模式-异步复制
每个Master配置一个Slave,有多对的Master-Slave,HA采用的是异步复制方式,主备有短暂的消息延迟,毫秒级别的(Master收到消息之后立刻向应用返回成功标识,同时向Slave写入消息)。优缺点如下:
优点:即使是磁盘损坏了,消息丢失的非常少,且消息实时性不会受到影响,因为Master宕机之后,消费者仍然可以从Slave消费,此过程对应用透明,不需要人工干预,性能同多个Master模式机会一样。
缺点:Master宕机,磁盘损坏的情况下,会丢失少量的消息。
4. 多Master多Slave模式-同步双写
每个Master配置一个Slave,有多对的Master-Slave,HA采用的是同步双写模式,主备都写成功,才会向应用返回成功。
优点:数据与服务都无单点,Master宕机的情况下,消息无延迟,服务可用性与数据可用性都非常高
缺点:性能比异步复制模式略低,大约低10%左右,发送单个Master的RT会略高,目前主机宕机后,Slave不能自动切换为主机,后续会支持自动切换功能。
三.producer端
消息类型分为:普通消息,定时消息(delay ),顺序消息(指定队列),事物消息
普通消息过程 :
1 .先去用构造函数初始化product (也会初始化4个队列,消息不能超过4M),2.然后设置nameservice,3.开始启动start()(准备工作)注册product,4.组装消息 5. send()发送消息
product 先去看看topic 没有被创建,先远程去nameService 里面拿 topic 和 对应的broker 信息 ,存到本地.然后从topic 拿取数据,根据取模选取哪个队列(轮询);然后于broker 建立连接,把消息发送到到 broker 里;事物模型:就是先去发送消息,但是不会被consumer 消费,然后回调在进行本地方法执行 ,提交(还会被check 事物状态).没问题的情况下mq 才发送成功 才会被consumer 消费(双主无从的 使用事物消息会被 直接回滚)
四.consuner 端
cbd 使用的长时间轮训取的 使用的push 类型
消费模型一般选这第二种(集群模式) 第一张广播模式 很少用
消息重复幂等消费: 原因mq 没办法避免消息重复,如果业务对消费重复比较敏感的话,需要在业务层取处理(redis incr 原子计数器)
消息过滤:可以根据tag 去过滤 或者根据文件过滤(需要开启enablePropertyFilter =true)
为什么要用组group?
方便缩小范围,一个组代表一个业务范围
五.nameServer 端
看脚本 进入程序入口
六.broker端
七.存储
消息会持久化到磁盘
消息存储 根据索引去 寻找对应磁盘位置
八.序列化