java
文章平均质量分 88
lackep
the quieter you become,the more are able to hear
展开
-
RocketMQ源码 — 八、 RocketMQ消息重试
RocketMQ的消息重试包含了producer发送消息的重试和consumer消息消费的重试。producer发送消息重试producer在发送消息的时候如果发送失败了,RocketMQ会自动重试。private SendResult sendDefaultImpl( Message msg, final CommunicationMode communicati...原创 2018-05-08 22:33:18 · 2134 阅读 · 2 评论 -
zookeeper源码 — 一、单机启动
zookeeper一般使用命令工具启动,启动主要就是初始化所有组件,让server可以接收并处理来自client的请求。本文主要结构:main入口配置解析组件启动main入口我们一般使用命令行工具来部署zk server,zkServer.sh,这个脚本用来启动停止server,通过不同的参数和选项来达到不同的功能。该脚本最后会通过Java执行下面的main方法org.apache...原创 2019-04-23 00:29:54 · 155 阅读 · 0 评论 -
zookeeper源码 — 二、集群启动—leader选举
上一篇介绍了zookeeper的单机启动,集群模式下启动和单机启动有相似的地方,但是也有各自的特点。集群模式的配置方式和单机模式也是不一样的,这一篇主要包含以下内容:概念介绍:角色,服务器状态服务器组件启动leader选举概念介绍:角色,服务器状态集群模式会有多台server,每台server根据不同的角色会有不同的状态,server状态的定义如下public enum...原创 2019-04-26 00:43:24 · 169 阅读 · 0 评论 -
RocketMQ源码 — 十一、 RocketMQ事务消息
分布式事务是一个复杂的问题,rmq实现了事务的最终一致性,rmq保证本地事务成功消息一定会发送成功并被成功消费,如果本地事务失败了,消息不会被发送。rmq事务消息的实现过程为:producer发送half消息broker确认half消息,并通知producer,表示消息已经成功发送到broker(这个过程其实就是步骤1broker的返回)producer收到half确认消息之后,执行...原创 2018-05-24 23:48:39 · 670 阅读 · 3 评论 -
RocketMQ源码 — 十、 RocketMQ顺序消息
RocketMQ本身支持顺序消息,在使用上发送顺序消息和非顺序消息有所区别发送顺序消息SendResult sendResult = producer.send(msg, new MessageQueueSelector() { @Override public MessageQueue select(List<MessageQueue> mqs, Messag...原创 2018-05-23 00:38:29 · 361 阅读 · 0 评论 -
RocketMQ源码 — 五、 主要feature及其实现方式
RocketMQ的主要特点以及实现方式单机支持1万以上持久队列所有数据单独存储到一个CommitLog,完全顺序写,随机读在一个broker上一个DefaultMessageStore管理一个commitLog顺序写:在commitLog.putMessage里面获取mapedFile之后进入synchronized块,开始写内存,所以当有新的消息需要保存的时候会等待锁释放,所以写消息的时原创 2018-02-28 09:06:48 · 206 阅读 · 0 评论 -
RocketMQ源码 — 四、 Consumer 接收消息过程
Consumerconsumer pull message订阅在Consumer启动之前先将自己放到一个本地的集合中,再以后获取消费者的时候会用到,同时会将自己订阅的信息告诉broker接收消息consumer启动的时候会启动两个service:RebalanceService:主要实现consumer的负载均衡,但是并不会直接发送获取消息的请求,而是构造request之后放到Pull原创 2018-02-28 09:06:45 · 505 阅读 · 0 评论 -
RocketMQ源码 — 三、 Producer消息发送过程
Producer消息发送producer startproducer启动过程如下图public void start(final boolean startFactory) throws MQClientException { switch (this.serviceState) { case CREATE_JUST: this.servi原创 2018-02-28 09:06:42 · 707 阅读 · 0 评论 -
RocketMQ源码 — 二、 NameServer
NameServer作用:Producer和Consumer获取Broker的地址目的:解耦Broker和Producer、Consumer原理:使用netty作为通信工具,监听指定端口,如果是broker注册,将broker的信息保存在内存中并保存到文件中,producer和consumer获取broker地址的请求RocketMQ包含的组件NameServer:单点,供Produc原创 2018-02-28 09:06:40 · 249 阅读 · 0 评论 -
RocketMQ源码 — 一、 quikstart
RocketMQ quikstart获取源码git clone https://github.com/alibaba/RocketMQ.git编译打包cd RocketMQbash install.sh这是一个maven工程,官方给出了编译打包的脚本install.sh,主要就是# mvn 编译打包mvn -Dmaven.test.skip=true clean package原创 2018-02-28 09:06:37 · 393 阅读 · 0 评论 -
RocketMQ源码 — 七、 RocketMQ高可用(2)
上一篇说明了RocketMQ怎么支持broker集群的,这里接着说RocketMQ实现高可用的手段之一——冗余。RocketMQ部署的时候一个broker set会有一个mater和一个或者多个slave,salve起到的作用就是同步master存储的的消息,并且会接收部分consumer读取消息的请求,下面围绕两个问题来阐明怎么做的冗余:怎么实现冗余冗余之后的消息读取怎么实现冗...原创 2018-05-06 16:14:41 · 270 阅读 · 0 评论 -
RocketMQ源码 — 六、 RocketMQ高可用(1)
高可用究竟指的是什么?请参考:关于高可用的系统RocketMQ做了以下的事情来保证系统的高可用多master部署,防止单点故障消息冗余(主从结构),防止消息丢失故障恢复(本篇暂不讨论)那么问题来了:怎么支持多broker的写?怎么实现消息冗余?下面分开说明这两个问题多master集群这里强调出master集群,是因为需要多个broker set,而一个...原创 2018-05-05 14:54:42 · 284 阅读 · 0 评论 -
RocketMQ源码 — 九、 RocketMQ延时消息
RocketMQ源码 — 九、 RocketMQ延时消息上一节消息重试里面提到了重试的消息可以被延时消费,其实除此之外,用户发送的消息也可以指定延时时间(更准确的说是延时等级),然后在指定延时时间之后投递消息,然后被consumer消费。阿里云的ons还支持定时消息,而且延时消息是直接指定延时时间,其实阿里云的延时消息也是定时消息的另一种表述方式,都是通过设置消息被投递的时间来实现的,但是Ap...原创 2018-05-10 00:09:17 · 2033 阅读 · 0 评论 -
zookeeper源码 — 三、集群启动—leader、follower同步
zookeeper集群启动的时候,首先读取配置,接着开始选举,选举完成以后,每个server根据选举的结果设置自己的角色,角色设置完成后leader需要和所有的follower同步。上面一篇介绍了leader选举过程,这篇接着介绍启动过程中的leader和follower同步过程。本文结构如下:同步过程总结同步过程设置server当前状态server刚启动的时候都处于LOOKIN...原创 2019-05-06 00:25:09 · 392 阅读 · 0 评论