RocketMQ原理解析-producer(转)

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: RocketMQ原理解析-producer

1,启动流程

TIM_20181112163623

Producer如何感知要发送消息的broker(brokerAddrTable中的值是怎么获得的)?

  • producer本地集合中没有,会根据指定topic到namesrv获取TopicPublishInfo,并放入本地集合。
  • 定时从namesrv更新topic路由信息。

Producer与broker间的心跳

Producer定时发送心跳,将producer信息(其实就是procduer的group)定时发送到broker(brokerAddrTable集合中列出的)。

master接收消息,slave拷贝master

Producer发送消息,只发送到broker_master机器,通过broker的主从复制机制拷贝到broker_slave。

2,如何发送消息

producer轮询某topic下的所有queue的方式 实现发送方的负载均衡。

image

Topic下的所有队列如何理解?

Broker Topic queue 注册namesrv队列(Topic_A)
broker1 Topic_A queue0 , queue1 broker1_queue0 ,broker1_queue1
broker2 Topic_A queue0, queue2, queue3 broker2_queue0,broker2_queue1,broker2_queue2
broker3 Topic_A queue0 broker3_queue0

Producer如何实现轮询队列?

Producer从namesrv获得topic_A路由信息TopicPublishInfo。

//Topic_A的所有的队列
private List<MessageQueue> messageQueueList
//自增整型
private volatile ThreadLocalIndex sendWhichQueue
/**
  *选择一个发送队列
  *lastBrokerName不为空,代表上次选择的queue失败,本次避开同一个queue
  */
public MessageQueue selectOneMessageQueue(final String lastBrokerName){
  //计算队列下标
  //sendWhichQueue.getAndIncrement()每次调用+1
  Math.abs(sendWhichQueue.getAndIncrement()) % this.messageQueueList.size()
}

Producer发消息系统重试?

//消息发送失败重试次数默认为2
private int retryTimesWhenSendFailed = 2;
//发送消息超时时间
private int sendMsgTimeout = 3000;

发送失败,换个队列继续发送所需条件:

1. 重试次数不到retryTimesWhenSendFailed (默认2次)
2. 发送此条消息花费时间还没有到sendMsgTimeout (默认3000毫秒)

3,如何发送顺序消息

4,发送分布式事物消息

5,消息在broker落地之普通消息

6,消息在broker落地之事物消息

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
2月前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
45 3
|
16天前
|
消息中间件 存储 Kafka
RocketMQ 工作原理图解,看这篇就够了!
本文详细解析了 RocketMQ 的核心架构、消息领域模型、关键特性和应用场景,帮助深入理解消息中间件的工作原理。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
RocketMQ 工作原理图解,看这篇就够了!
|
26天前
|
算法 Java 数据库连接
Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性
本文详细介绍了Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性。连接池通过复用数据库连接,显著提升了应用的性能和稳定性。文章还展示了使用HikariCP连接池的示例代码,帮助读者更好地理解和应用这一技术。
37 1
|
28天前
|
消息中间件 存储 Kafka
MQ 消息队列核心原理,12 条最全面总结!
本文总结了消息队列的12个核心原理,涵盖消息顺序性、ACK机制、持久化及高可用性等内容。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
|
6天前
|
JavaScript 前端开发 API
Vue.js响应式原理深度解析:从Vue 2到Vue 3的演进
Vue.js响应式原理深度解析:从Vue 2到Vue 3的演进
29 0
|
2月前
|
数据采集 存储 编解码
一份简明的 Base64 原理解析
Base64 编码器的原理,其实很简单,花一点点时间学会它,你就又消除了一个知识盲点。
69 3
|
12天前
|
API 持续交付 网络架构
深入解析微服务架构:原理、优势与实践
深入解析微服务架构:原理、优势与实践
15 0
|
13天前
|
存储 供应链 物联网
深入解析区块链技术的核心原理与应用前景
深入解析区块链技术的核心原理与应用前景
|
13天前
|
存储 供应链 安全
深度解析区块链技术的核心原理与应用前景
深度解析区块链技术的核心原理与应用前景
22 0
|
2月前
|
前端开发 Java 应用服务中间件
21张图解析Tomcat运行原理与架构全貌
【10月更文挑战第2天】本文通过21张图详细解析了Tomcat的运行原理与架构。Tomcat作为Java Web开发中最流行的Web服务器之一,其架构设计精妙。文章首先介绍了Tomcat的基本组件:Connector(连接器)负责网络通信,Container(容器)处理业务逻辑。连接器内部包括EndPoint、Processor和Adapter等组件,分别处理通信、协议解析和请求封装。容器采用多级结构(Engine、Host、Context、Wrapper),并通过Mapper组件进行请求路由。文章还探讨了Tomcat的生命周期管理、启动与停止机制,并通过源码分析展示了请求处理流程。

推荐镜像

更多
下一篇
无影云桌面