Apache RocketMQ

聊聊rocketmq的KVConfigManager

自古美人都是妖i 提交于 2020-04-10 11:47:26
序 本文主要研究一下rocketmq的KVConfigManager KVConfigManager org/apache/rocketmq/namesrv/kvconfig/KVConfigManager.java public class KVConfigManager { private static final Logger log = LoggerFactory.getLogger(LoggerName.NAMESRV_LOGGER_NAME); private final NamesrvController namesrvController; private final ReadWriteLock lock = new ReentrantReadWriteLock(); private final HashMap<String/* Namespace */, HashMap<String/* Key */, String/* Value */>> configTable = new HashMap<String, HashMap<String, String>>(); public KVConfigManager(NamesrvController namesrvController) { this.namesrvController =

聊聊rocketmq的BrokerHousekeepingService

我只是一个虾纸丫 提交于 2020-04-10 11:47:04
序 本文主要研究一下rocketmq的BrokerHousekeepingService BrokerHousekeepingService org/apache/rocketmq/namesrv/routeinfo/BrokerHousekeepingService.java public class BrokerHousekeepingService implements ChannelEventListener { private static final Logger log = LoggerFactory.getLogger(LoggerName.NAMESRV_LOGGER_NAME); private final NamesrvController namesrvController; public BrokerHousekeepingService(NamesrvController namesrvController) { this.namesrvController = namesrvController; } @Override public void onChannelConnect(String remoteAddr, Channel channel) { } @Override public void onChannelClose(String

rocketmq源码解析之NamesrvController创建

自古美人都是妖i 提交于 2020-04-10 11:30:12
说在前面 本次开始进行rocketmq源码解析,比较喜欢rocketmq的架构设计,rocketmq内嵌了namesrv注册中心保存了元数据,进行负载均衡、容错的一些处理,4.3以上支持消息事务,有管理控制台、命令行工具,底层namesrv与broker、client与server交互netty实现。更多精彩文章请关注“天河聊架构”微信公众号。 源码解析 创建NamesrvController,进入这个方法org.apache.rocketmq.namesrv.NamesrvStartup#main,再进入这个方法org.apache.rocketmq.namesrv.NamesrvStartup#main0 public static NamesrvController main0(String[] args) { try { // 源码解析之创建namesrv控制器 =》 NamesrvController controller = createNamesrvController(args); // 源码解析之启动namesrv控制器 =》 start(controller); String tip = "The Name Server boot success. serializeType=" + RemotingCommand

RocketMQ笔记---延时级别

孤街浪徒 提交于 2020-04-09 19:45:24
RocketMQ 支持定时消息,但是不支持任意时间精度,仅支持特定的 level,例如定时 5s, 10s, 1m 等。其中,level=0 级表示不延时,level=1 表示 1 级延时,level=2 表示 2 级延时,以此类推。 如何配置: 在服务器端(rocketmq-broker端)的属性配置文件中加入以下行: messageDelayLevel=1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h 描述了各级别与延时时间的对应映射关系。 这个配置项配置了从1级开始各级延时的时间,如1表示延时1s,2表示延时5s,14表示延时10m,可以修改这个指定级别的延时时间; 时间单位支持:s、m、h、d,分别表示秒、分、时、天; 默认值就是上面声明的,可手工调整; 默认值已经够用,不建议调整 【转】 来源: oschina 链接: https://my.oschina.net/u/4416290/blog/3226424

物联网宠儿mqtt.js那些事儿

血红的双手。 提交于 2020-04-09 18:47:24
常见的mq有Kafka,RocketMQ和RabbitMQ,大家也很常见。 前者很常见,MQTT是什么呢?MQTT属于IoT也就是物联网的概念。 快来和使用mqtt.js开发IM功能2年的作者一探究竟吧~ 常见的mq有Kafka,RocketMQ和RabbitMQ,大家也很常见。MQTT是什么呢? Kafka,RocketMQ和RabbitMQ属于微服务间的mq,而MQTT则属于IoT也就是物联网的概念。 mqtt.js是MQTT在nodejs端的实现。vue技术栈下的前端也可用。 mqtt.js官方为微信小程序和支付宝小程序也做了支持。微信小程序的MQTT协议名为 wxs ,支付宝小程序则是 alis 。 如果还是一脸懵逼,那么就跟随我通过mqtt.js去认识一下这个物联网领域的宠儿吧。 什么是微消息队列? MQTT关键名词解释 P2P消息和Pub/Sub消息 封装的mqtt.js通用class 客户端发包函数sendPacket 客户端连接 mqtt.connect() 订阅topic mqtt.Client#subscribe() 发送消息 mqtt.Client#publish() 接收消息 mqtt.Client#“message”事件 什么是微消息队列? 消息队列一般分为两种: 微服务消息队列(微服务间信息传递,典型代表有RabbitMQ,Kafka,RocketMQ)

系统学习消息队列分享(三) 该如何选择消息队列?

别说谁变了你拦得住时间么 提交于 2020-04-09 18:32:44
聊一下几个比较常见的开源的消息队列中间件。如果你正在做消息队列技术选型,不知道该选择哪款消息队列,你一定要先听一下这节课的内容。 作为一个程序员,相信你一定听过“没有银弹”这个说法,这里面的银弹是指能轻松杀死狼人、用白银做的子弹,什么意思呢?我对这句话的理解是说,在软件工程中,不存在像“银弹”这样可以解决一切问题的设计、架构或软件,每一个软件系统,它都是独一无二的,你不可能用一套方法去解决所有的问题。 在消息队列的技术选型这个问题上,也是同样的道理。并不存在说,哪个消息队列就是“最好的”。常用的这几个消息队列,每一个产品都有自己的优势和劣势,你需要根据现有系统的情况,选择最适合你的那款产品。 选择消息队列产品的基本标准 虽然这些消息队列产品在功能和特性方面各有优劣,但我们在选择的时候要有一个最低标准,保证入选的产品至少是及格的。 接下来我们先说一下这及格的标准是什么样的。 首先,必须是开源的产品,这个非常重要。开源意味着,如果有一天你使用的消息队列遇到了一个影响你系统业务的 Bug,你至少还有机会通过修改源代码来迅速修复或规避这个 Bug,解决你的系统火烧眉毛的问题,而不是束手无策地等待开发者不一定什么时候发布的下一个版本来解决。 其次,这个产品必须是近年来比较流行并且有一定社区活跃度的产品。流行的好处是,只要你的使用场景不太冷门,你遇到 Bug 的概率会非常低

RocketMQ笔记---延时级别

徘徊边缘 提交于 2020-04-09 17:56:31
RocketMQ 支持定时消息,但是不支持任意时间精度,仅支持特定的 level,例如定时 5s, 10s, 1m 等。其中,level=0 级表示不延时,level=1 表示 1 级延时,level=2 表示 2 级延时,以此类推。 如何配置: 在服务器端(rocketmq-broker端)的属性配置文件中加入以下行: messageDelayLevel=1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h 描述了各级别与延时时间的对应映射关系。 这个配置项配置了从1级开始各级延时的时间,如1表示延时1s,2表示延时5s,14表示延时10m,可以修改这个指定级别的延时时间; 时间单位支持:s、m、h、d,分别表示秒、分、时、天; 默认值就是上面声明的,可手工调整; 默认值已经够用,不建议调整 【转】 来源: oschina 链接: https://my.oschina.net/u/4347380/blog/3226379

RocketMQ调研

三世轮回 提交于 2020-04-08 18:01:59
一、发展历程 早期淘宝内部有两套消息中间件系统:Notify和Napoli。 先有的Notify(至今12历史),后来因有序场景需求,且恰好当时Kafka开源(2011年),所以参照Kafka的设计理念自研了RocketMQ。 目前Notify和RocketMQ二者的定位如下: RocketQ 主要面向消息有序的场景,能够提供更大的消息堆积能力,拉模式,消息持久化在磁盘 Notify主要面向更加安全可靠地交易类场景,无序、推模式、消息持久化在mysql RocketMQ发展历程如下 : Metaq 1.x 开源社区维护killme2008维护,因为依赖zk挂了,导致上下游服务全网宕机,到了12年基于开源Kafka,直接用java语言翻译重写 Metaq 2.x 2012年11月上线,淘宝内部使用 RocketMQ 3.x 后来一统江湖成为整个阿里系主流MQ。基于公司内部开源共建原则, RocketMQ项目只维护核心功能,且去除了所有其他运行时依赖,核心功能最简化。每个BU的个性化需求都在RocketMQ项目之上进行深度定制。RocketMQ向其他BU提供的仅仅是Jar包,例如要定制一个Broker,那么只需要依赖rocketmq-broker这个jar包即可,可通过API进行交互,如果定制client,则依赖rocketmq-client这个jar包,对其提供的api进行再封装。

rocketmq 顺序消费,消息事物

爱⌒轻易说出口 提交于 2020-04-06 03:41:42
RocketMQ详解(7)——顺序消费 分布式事务-RocketMQ消息事务设计思路及Demo RabbitMQ、RocketMQ、ActiveMQ 、Kafka 四个分布式消息队列的区别 深入理解RocketMQ的消费者组、队列、Broker,Topic 来源: oschina 链接: https://my.oschina.net/miaojiangmin/blog/3218038

源码阅读技巧篇:RocketMQ DLedger 多副本即主从切换专栏回顾

余生颓废 提交于 2020-03-25 12:12:13
3 月,跳不动了?>>> RocketMQ DLedger 多副本即主从切换专栏总共包含9篇文章,时间跨度大概为2个月的时间,笔者觉得授人以鱼不如授人以渔,借以这个系列来展示该系列的创作始末,展示笔者阅读源码的技巧。 首先在下决心研读 RocketMQ DLedger 多副本(主从切换)的源码之前,首先还是要通过官方的分享、百度等途径对该功能进行一些基本的了解。 我们了解到 RocketMQ 在 4.5.0 之前提供了主从同步功能,即当主节点宕机后,消费端可以继续从从节点上消费消息,但无法继续向该复制组发送消息。RocketMQ 4.5.0版本引入了多副本机制,即 DLedger,支持主从切换,即当一个复制组内的主节点宕机后,会在该复制组内触发重新选主,选主完成后即可继续提供消息写功能。同时还了解到 rocketmq 主从切换是基于 raft 协议的。 raft 协议是何许人也,我猜想大部分读者对这个名词并不陌生,但像笔者一样只是听过其大体作用但并未详细学习的应该也不在少数,故我觉得看 RocketMQ DLedger 多副本即主从切换之前应该重点了解 raft 协议。 1、 RocketMQ 多副本前置篇:初探raft协议 本文主要根据 raft 官方提供的动画来学习了解 raft 协议,从本文基本得知了 raft 协议主要包含两个重要部分:选主 以及 日志复制。在了解了