RocketMq 专题

1、https://www.jianshu.com/p/453c6e7ff81c

2、https://github.com/a2888409/RocketMQ-Learning/blob/master/book/ch2/2-remoting.md

3、中间件博客:http://jm.taobao.org/2017/01/26/20170126/

4、https://yq.aliyun.com/articles/165103

5、介绍详细,但是细节不可信:https://juejin.im/post/5de3c8026fb9a07194761641

6、mq 存储文件:https://my.oschina.net/mingxungu/blog/3083961

https://my.oschina.net/liangxiao/blog/3002888

7、顺序消费:http://lifestack.cn/archives/483.html

8、indexFile:https://www.jianshu.com/p/c61945e628fb

 

启动rocketmq参考资料

1、本地运行代码:https://juejin.im/post/5d35bb6c6fb9a07ee5665c5a

核心:

启动环境的配置:ROCKETMQ_HOME=/Users/didi/Downloads/work/rocketMq/rocketmq/bi-path/broker

Broker的配置:-c /Users/didi/Downloads/work/rocketMq/rocketmq/bi-path/broker/conf/broker.conf

2、broker 配置参数:https://blog.csdn.net/wangjinduo35056/article/details/88350263  

https://www.cnblogs.com/qdhxhz/p/11116197.html

 

nameService、broker、product、consumer之间信息的交互

NameSrv监测Broker的死亡

1、每个Broker会每隔30s向NameSrv更新自身topic信息。NameSrv收到RegisterBroker信息,更新自己的brokerLiveTable结构。2、然后NameServer会每10s,扫描一次这个结构。如果发现上次更新时间距离当前时间超过了BROKER_CHANNEL_EXPIRED_TIME = 1000 * 60 * 2(2分钟),则认为此broker死亡。

Producer/Consumer如何得知Broker死亡

当某个Broker死亡之后,NameSrv并不会主动通知Producer和Consumer。而是Producer/Consumer周期性的去NameSrv取。这里的pollNameServerInteval默认是30s。这也就是意味着,默认情况下,当某个Broker挂了之后,Client需要30s的延迟才会得知此消息。

 

顺序消息

概述:顺序消息是指某个分区(类比rank函数分区的概念,如果要保证单个订单在创建、结算、支付等阶段的顺序性,那么订单就是一个分区,也叫局部顺序)的不同阶段的消息先进先出,具有顺序性。

针对顺序消息这个功能,Rocket Mq做的努力并不是很多,主要集中在两个方面:1、在发送消息的时候,通过自定义或是默认的MessageQueueSelector保证相同分区的消息发到相同的MessageQueue里面,也就是在broker的MessageQueue里面是顺序存储的。2、在消费顺序消息的时候(确认正常消息会不会),会对broker下发针对MessageQueue加锁的请求,这就保证同一时刻一个MessageQueue只会被一个consumer线程消费。

要正确地使用顺序消息,需要在客户端(product、consumer)使用的时候,注意以下几点:

1、product要保证消息以正确的顺序传输给broker。这里需要强调的是,要尽量避免并发,无论是单机多线程还是集群环境,因为并发场景下,使用者无法保证多个消息到达broker的先后顺序。


 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章