美文网首页
RocketMq-基本知识

RocketMq-基本知识

作者: 麦大大吃不胖 | 来源:发表于2020-12-15 11:16 被阅读0次

by shihang.mai

1. 角色关系

RocketMq角色关系
  1. broker向NameServer注册自己的信息
  2. producer向NameServer 获取broker信息,producer向某个topic发送消息时,拿topic去匹配获取的信息,获取该Topic对应的broker,消息就向这些broker去投放
  3. consumer向NameServer获取broker信息,consumer消费某个Topic时,拿topic去匹配获取的信息,获取该Topic对应的broker,consumer就去消费broker里面的消息

2 集群模型

RocketMq集群模型
  1. 上图存在3组broker,分别为brokerName=s1,brokerName=s2,brokerName=s3
  2. 其中brokerName=s1有两个,brokerId=0的机为master,brokerId>0为salve
  3. brokerName =s2, brokerName =s3, brokerName =s1(brokerId=0)形成了master集群
  4. 有一个Topic1,Topic1是一个抽象,它是所有queue的抽象,Topic1在各个broker上都有queue,并且queue的数量是可以不一样的
  5. consumer可以向master消费,也可以向salve消费.master与salve需要数据同步,而数据同步分为两种方式
  • 同步执行(同步双写):producer向broker发送msg,master同步msg给salve,然后salve返回ok给master,master再返回给producer
  • 异步执行:producer向broker发送msg, broker立刻返回.而master和salve间的数据同步它们自行执行

Topic2只为了说明第5点.左上角的定位Ip,定位queue需要看完源码后才能理解

3. 生产者发出消息

3.1 同步发出消息

发出,等到broker返回消息

producer.send(msg);

3.2 异步发出消息

发出,利用事件监听broker返回消息

producer.send(msg, new SendCallback() {
    @Override
    public void onSuccess(SendResult sendResult) {

    }

    @Override
    public void onException(Throwable throwable) {

    }
    });

3.3 单向发出消息

发出,不等待broker返回消息

nmsProducer.sendOneway(msg);

3.4 事务发出消息

producer.setTransactionListener(new TransactionListener() {
            @Override
            public LocalTransactionState executeLocalTransaction(Message message, Object o) {
                //执行本地事务
                /**
                 * 回滚 LocalTransactionState.ROLLBACK_MESSAGE;
                 * broker定时检查producer事务状态 LocalTransactionState.UNKNOW;
                 * 成功 LocalTransactionState.COMMIT_MESSAGE
                 */
                //
                // LocalTransactionState.ROLLBACK_MESSAGE;
                //LocalTransactionState.UNKNOW;
                return LocalTransactionState.COMMIT_MESSAGE;
            }

            @Override
            public LocalTransactionState checkLocalTransaction(MessageExt messageExt) {
                //broker端回调监测本地事务
                return LocalTransactionState.COMMIT_MESSAGE;
            }
        });

3.5 发消息重试

//producer端
producer.setRetryTimesWhenSendFailed(2);
producer.setRetryAnotherBrokerWhenNotStoreOK(true)

3.6 顺序发出消息

//producer端利用MessageQueueSelector

4. 消费模式(同一组消费组内)

4.1 广播消费

即消费组内所有节点都消费该消息,但该模式broker不会重投。offset记录在consumer上。

consumer.setMessageModel(MessageModel.BROADCASTING);

4.2 集群消费(默认)

一组consumer派出一个节点消费,若消费不成功,broker会重投。offset记录在broker上。

consumer.setMessageModel(MessageModel.CLUSTERING);

4.3 消费时sql过滤

需要producer端和consumer端互相配合,并且需要配置broker.conf

//producer端
msg.putUserProperty("age","18");
//consumer端
MessageSelector messageSelector = MessageSelector.bySql("age >= 18 and age <= 28");
consumer.subscribe("topic",messageSelector);
//broker.conf添加配置
enablePropertyFilter=true
//broker启动时加载上面的文件broker.conf

4.4 consumer消费重试

/**
* consumer端 返回CONSUMER_LATER
* 只有在集群模式下,有消息重投机制. 1s 5s .....2h
/

4.5 顺序消费

//consumer端利用MessageListenerOrderly

4.6 订阅关系一致

订阅关系一致指的是同一个消费者Group ID下所有Consumer实例所订阅的Topic、Group ID、Tag必须完全一致
https://zhuanlan.zhihu.com/p/58728454
https://zhuanlan.zhihu.com/p/58755005

相关文章

  • RocketMq-基本知识

    基本知识 by shihang.mai 0. 角色关系 broker向NameServer注册自己的信息 prod...

  • RocketMQ-架构设计

    RocketMQ-架构设计 [https://github.com/apache/rocketmq/blob/ma...

  • mq安装配置

    软件安装 1.安装目录 一般以${HOME}/project_RocketMQ/rocketmq-${versio...

  • RocketMQ-基础使用(二)

    前置文章:RocketMQ-基础使用(一)[https://www.jianshu.com/p/a2f68c461...

  • RocketMQ-入门

    一、MQ应用场景 业务解耦解耦是消息队列要解决的最本质问题。所谓解耦,简单点讲就是一个事务,只关心核心的流程。而需...

  • RocketMQ-入门

    RocketMQ是什么 RocketMQ是一个分布式消息和流数据平台,具有低延迟、高性能、高可靠性、万亿级容量和灵...

  • RocketMQ

    1️⃣架构原理 本着不重复造轮子的原则,这里有一篇很好的文章RocketMQ-架构原理,对RocketMQ的基本概...

  • RocketMQ主从搭建

    RocketMQ-四种集群环境构建 1.单点模式 2.主从模式主节点消息收发,同步到从节点,主节点挂了,从节点可以...

  • RocketMQ-概要篇

    消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题实现高性能,高可用,可伸缩和最终...

  • RocketMQ-消息发送

    简介 本文通过问题入手,介绍下RocketMQ的消息发送逻辑是怎么样的。消息发送的大体逻辑图如下: 问题 首先我们...

网友评论

      本文标题:RocketMq-基本知识

      本文链接:https://www.haomeiwen.com/subject/guttwktx.html