上一篇我们详细分析了源码分析RocketMQ多副本之Leader选主,本文将详细分析日志复制的实现。有了前篇源码分析RocketMQDLedger多副本存储实现,本文将直接从Leader处理客户端请求入口开始,其入口为:DLedgerServer的handleAppend方法开始讲起。1、日志复制基本流程在正式分析RocketMQDLedger多副本复制之前,我们首先来了解客户端发送日志的请求协议
分类:
其他好文 时间:
2020-12-07 12:45:37
阅读次数:
11
RocketMQDLedger的存储实现思路与RocketMQ的存储实现思路相似,本文就不再从源码角度详细剖析其实现,只是点出其实现关键点。我们不妨简单回顾一下CommitLog文件、ConsumeQueue文件设计思想。其文件组成形式如下:正如上图所示,多个commitlog文件组成一个逻辑上的连续文件,使用MappedFileQueue表示,单个commitlog文件使用MappedFile表
分类:
其他好文 时间:
2020-12-07 12:44:28
阅读次数:
10
FreeMarker是一款模板引擎:即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。 FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarkerTemplateLanguage(FTL),属于简单、专用的语言。需
分类:
编程语言 时间:
2020-12-04 11:13:12
阅读次数:
4
1.client端EurekaClient提供三个功能:EurekaClientAPIcontractsare:providetheabilitytogetInstanceInfo(s)(invariousdifferentways)providetheabilitytogetdataaboutthelocalClient(knownregions,ownAZetc)providetheabili
分类:
编程语言 时间:
2020-12-04 11:12:00
阅读次数:
5
程序的发展,需要引入集中配置:随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关、参数的配置、服务器的地址……并且对配置的期望也越来越高,配置修改后实时生效,灰度发布,分环境、分集群管理配置,完善的权限、审核机制……并且随着采用分布式的开发模式,项目之间的相互引用随着服务的不断增多,相互之间的调用复杂度成指数升高,每次投产或者上线新的项目时苦不堪言,因此需要引用配置中心治理。有哪些开源配置
分类:
其他好文 时间:
2020-12-04 11:10:40
阅读次数:
5
1.引言事务特性事务是并发控制的单元,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。通过事务将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性。事务通常是以begintransaction开始,以commit或rollback结束。Commint表示提交,即提交事务的所有操作。具体地说就是将事务中所有对数据的更新写回到磁盘上的物理数据库中去,事务正常结束
分类:
编程语言 时间:
2020-12-04 11:02:40
阅读次数:
5
0概述spring-messaging模块为集成messagingapi和消息协议提供支持。其代码结构为:其中base定义了消息Message(MessageHeader和body)、消息处理MessageHandler、发送消息MessageChannel。1.base模块其结构如下所示:其中:message由两部分组成,MessageHandler是一个处理消息的约定,springmessag
分类:
编程语言 时间:
2020-12-03 11:52:47
阅读次数:
8
该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释(Mybatis源码分析 GitHub 地址、Mybatis-Spring 源码分析 GitHub 地址、Spring-Boot-Starter 源码分析 GitHub 地址)进行阅读 MyBati ...
分类:
数据库 时间:
2020-12-01 12:14:50
阅读次数:
12
Netty中的内存分配是基于ByteBufAllocator这个接口实现的,通过对它的具体实现,可以用来分配我们之前描述过的任意类型的BytebBuf实例;我们先看一下ByteBufAllocator接口中的定义的关键方法 一、ByteBufAllocator 构造 public interface ...
分类:
Web程序 时间:
2020-12-01 11:57:29
阅读次数:
8
1)配置flume(flume-kafka.conf) # define a1.sources = r1 a1.sinks = k1 a1.channels = c1 # source a1.sources.r1.type = exec a1.sources.r1.command = tail -F ...
分类:
Web程序 时间:
2020-11-30 15:35:17
阅读次数:
9