《专题四 服务化改造》之《第三章 【补充资料】常见消息中间件应用详解》之《第十一节 Rocketmq》

《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 网易采用的分布式事务解决方案:
      在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_23204557/article/details/112423123