文章目录
《3.11.1 rocketmq入门》
- RocketMQ的特性:
- NameServer:
- offset:
- partition:
- Tag:
- key:
《3.11.2 rocket集群架构》
- rocketMQ架构方案:
- 配置与启动:
vi bin/runserver.sh
如内存不够,请改动JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g
vi bin/runbroker.sh
如内存不够,请改动JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
后台启动nameserver(注意要有logs文件夹):
nohup sh bin/mqnamesrv > logs/namesrv.log 2>&1 &
如果是多网卡,可以在conf/broker.conf中设置brokerIP:
brokerIP1 = 192.168.1.114
启动broker,下面的-n localhost:9876为指定nameserver地址
nohup sh bin/mqbroker -c conf/broker.conf -n localhost:9876 > logs/broker.log 2>&1 &
一系列管理命令:./bin/mqadmin
如 ./bin/mqadmin clusterList -n 192.168.1.114:9876
如创建topic: ./bin/mqadmin updateTopic -n '192.168.1.114:9876' -c DefaultCluster -t TopicTest
- 21 52 RocketMQ的consumer push模式基于pull实现
- 30 30 主从异步;主从同步,又称为双写。
主之间没有数据同步。主和它的从可称为一个group,有相同的brokerName。一个cluster可以有多个group - 一个broker可以有多个queue,一个queue同时只能被一个consumer读?(我认为后者只在集群消费模式下是对的。关于集群消费和广播消费,请查看官网)
《3.11.3 有序消息》
-
有序消息
-
- 全局顺序:
- 全局顺序:
-
- 分区顺序:
producer: 下图的sharding key是消息队列选择器MessageQueueSelector的一个入参
consumer:使用MessageListenerOrderly
- 分区顺序:
-
全局顺序与分区顺序对比:
《3.11.4 订阅机制和定时消息》
- rocketmq相比于pull,推荐用push
- 7分 设置消费模式,默认是CLUSTERING:
/**
* MessageModel.BROADCASTING 广播消费模式
* MessageModel.CLUSTERING 集群消费模式
*/
consumer.setMessageModel(MessageModel.BROADCASTING);
- 10 20 不同的延时level,对就不同的queue
《3.11.5 批量消息和事务消息》
- 2 51 一个topic默认有4个queue?
- 4 15 事务消息:
先发送消息到broker,再根据查询本地事务的结果,有3种可能:
1,本地事务成功,commit(rocketmq的comsumer收到消息)
2, 本地事务失败,rollback(rocketmq的comsumer收不到消息)
3,本地事务结果未知,过段时间(默认60s)后回查本地事务,再决定commit或rollback
《3.11.6 RocketMQ最佳实践》
- producer最佳实践:
- 15 30 Consumer失败后重试,普通消息变延时消息
- 23 30 去重:
- 31分 RocketMQ的JVM设置
《超时关单、异步数据传输场景、定时任务调度场景》
-
超(定)时关单的技术方案:
-
- 使用定时任务技术:timer,task,或框架:xxl-job,quartz等
-
- redis:利用key的超时,对key进行监听
-
- rabbitmq死信队列
-
81 30 消息通讯:rabbitmq web stomp plugin 底层基于WebSocket
-
137分 海量数据(如日志)同步。比如ELK;又如mysql主从同步要用到binlog,中间可用到Kafka,阿里的canal,点评的puma大同小异。但可能对实时性不好
-
分布式事务:
-
- 146 20 myth: 基于消息队列解决分布式事务的框架,java开发
-
- 149 30 网易采用的分布式事务解决方案:
- 149 30 网易采用的分布式事务解决方案: