自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 资源 (1)
  • 收藏
  • 关注

原创 【Java11新特性】-全新的HTTP 客户端

全新的HTTP客户端用于替换`HttpURLConnection`。新的Http客户端不仅支持HTTP/1.1,还提供HTTP/2以及WebSocket的支持。在性能方面也有了大幅提升,按照JEP中的描述,新的HTTP客户端有着不输于Apache HttpClient库以及Netty和Jetty的性能。

2023-11-04 23:25:01 671

原创 异步任务编排利器CompletableFuture实战

CompletableFuture是Java8中并发包提供的异步编程实现类,它是Future接口的扩展接口,它拥有比Future更强大的能力,本篇文章将会通过例子实战演示CompletableFuture的使用方法

2023-11-04 20:07:44 227

原创 【Java8新特性】Stream流收集器使用

本篇文章详细介绍了Java8中流收集器API,包括了Stream中的两种重载collect()和Collector接口以及Collector接口的实现类Collectors

2023-10-22 14:00:48 306

原创 【SpringFramework | 源码分析】环境搭建

本篇文章将介绍Spring Framework源码分析的第一步,在本地如何搭建Spring Framework源码分析环境

2023-07-20 20:52:39 461

原创 VMware Fusion虚拟机设置静态ip方法

本文将介绍VMware Fusion虚拟机设置静态ip的方法

2023-07-08 13:45:05 1290 1

原创 一文入门Scala(学习Spark必备)

本文主要介绍了Scala基本语法和Scala中函数式编程相关内容

2023-06-01 08:53:40 3075

原创 【RocketMQ | 源码分析】消息存储文件的加载与恢复机制

前面文章我们介绍了Broker是如何将消息全量存储到CommitLog文件中,并异步生成dispatchRequest任务更新ConsumeQueue,IndexFile的过程以及ConsumeQueue和IndexFile的文件结构。由于是异步转发消息,就可能出现消息成功存储到CommitLog文件,转发请求任务执行失败,Broker宕机了,此时CommitLog和Index消息并未处理完,导致CommitLog与ConsumeQueue和IndexFile文件中的数据不一致。

2023-05-05 08:45:35 218

原创 【RocketMQ | 源码分析】ConsumeQueue与IndexFile更新

前面我们介绍了消息是如何存储的,消息是如何刷盘的,讲的都是CommitLog是如何存储和刷盘的。虽然CommitLog顺序存储着所有消息,但是CommitLog中的消息并没有区分topic、keys等,如果需要消费某个topic的消息或者查找某一条消息只能遍历CommitLog文件去查找,性能相当低下,因此有了ConsumeLog和IndexFile两个文件类型,这两个文件的作用主要是提升消息消费和查询的性能。

2023-05-01 21:28:48 275

原创 【RocketMQ | 源码分析】Broker消息是如何刷盘的? (下)

上篇文章我们介绍了消息刷盘的四种方式,本篇文章我们来介绍Broker是如何实现这四种刷盘方式。本次我们了解了RocketMQ中四种刷盘策略对应的刷盘服务同步刷盘-等待消息保存到磁盘同步刷盘-不等待消息保存到磁盘上上面两个同步刷盘都是由GroupCommitService实现的,由GroupCommitService将MappedByteBuffer消息刷盘到磁盘上异步刷盘-开启堆外缓存。

2023-04-24 09:04:58 180

原创 【RocketMQ | 源码分析】Broker消息是如何刷盘的? (上)

我们在学习RocketMQ的时候,我们知道RocketMQ的刷盘策略有两个刷盘策略同步刷盘同步刷盘即Broker消息已经被持久化到硬盘后才会向客户端返回成功。同步刷盘的优点是能保证消息不丢失,但是这是以牺牲写入性能为代价的。异步刷盘异步刷盘是指Broker将信息存储到pagecache后就立即向客户端返回成功,然后会有一个异步线程定时将内存中的数据写入磁盘,默认时间间隔为500ms。Broker中的刷盘策略是通过Broker配置文件中进行配置,可以配置(异步刷盘)和SYNC_FLUSH。

2023-04-23 08:46:18 378

原创 【NIO实战】深入理解FileChannel

FileChannel是对一个文件读,写,映射,操作的Channel。FileChannel是线程安全的,可以被多个线程并发使用。同一个进程中的多个FileChannel看到的同一个文件的视图是相同的,由于底层操作系统执行的缓存和网络文件系统协议引起的延迟,不同进程中在同一时间看到的文件视图可能会不同。

2023-04-18 09:06:23 1536

原创 【NIO实战】深入理解NIO三大组件:buffer、channel、selector

根据IO模型,可以把IO分为下面三种BIOBIO(Blocking IO)是最传统的一种IO模型,BIO在读/写数据如果没有可以读取/写入时会发生阻塞。BIO 读写是面向流的,一次性只能从流中读取一个或者多个字节,并且读完之后流无法再读取,需要我们自己讲数据缓存起来,BIO位于java.io包中。NIONIO(New IO)采用非阻塞模式,它是基于Reactor模式,IO调用不会被阻塞,它是NIO位于java.nio包中

2023-04-16 22:09:14 220

原创 【RocketMQ | 源码分析】Broker是如何保存消息的

前面我们介绍了RocketMQ是如何接收消息的,下面我们来介绍Broker是如何保存消息的。CommitLog是消息和消息数据存储的主体,CommitLog存储的文件目录在中,它其实是一个目录,消息并不是直接存储在CommitLog中,而是存储在由20位数字构成的文件中。消息在commitLog中存储的格式如下所示totalSize消息总长度,4字节magicCode魔数,4字节,固定值十六进制是0xdaa320a7,10进制是-875286124bodyCRC消息体crc校验码,4字节。

2023-04-12 08:44:40 294

原创 【RocketMQ | 源码分析】Broker接收消息过程都做了什么

Broker的作用主要负责消息的存储、投递和查询以及服务高可用保证。Broker是RocketMQ中最重要也是最复杂的组件,本篇文章是Broker源码分析的第一篇,通过本篇文章,可以对Broker有一个初步、整体的认识。文章中的代码几乎逐行加了注释,尽可能让把相关的类都介绍了一遍,方便后续深入学习Broker其他知识。简介内容截取自官网在 Master-Slave 架构中,Broker 分为 Master 与 Slave。一个Master可以对应多个Slave,但是一个Slave只能对应一个Master。

2023-04-11 08:52:26 212

原创 【RocketMQ | 源码分析】Broker启动过程

Broker的作用主要负责消息的存储、投递和查询以及服务高可用保证。Broker是RocketMQ中最重要也是最复杂的组件,本篇文章是Broker源码分析的第一篇,通过本篇文章,可以对Broker有一个初步、整体的认识。文章中的代码几乎逐行加了注释,尽可能让把相关的类都介绍了一遍,方便后续深入学习Broker其他知识。简介内容截取自官网在 Master-Slave 架构中,Broker 分为 Master 与 Slave。一个Master可以对应多个Slave,但是一个Slave只能对应一个Master。

2023-04-10 09:31:23 650

原创 【RocketMQ | 源码分析】namesrv路由失效过程

前面我们介绍了Broker每隔30s会向Namesrv发送心跳包,心跳包中包含Broker路由信息,Namesrv会更新RouteInfoManager中的路由信息。如果Broker宕机,Namesrv要如何将失效的Broker剔除呢?生产者和消费者要如何获取RouteInfoManager中的路由信息?namesrv在启动后每5s检查一次brokerLiveTable中broker更新时间,namesrv会注销brokerLiveTable中信息更新超过120秒的broker。

2023-04-10 09:20:01 288

原创 【RocketMQ | 源码分析】RocketMQ本地调试环境搭建

环境搭建是源码分析的第一步,俗话说磨刀不误砍柴工,我们必须要先把本地环境搭建好,才方便后续我们分析和debug源码。我们主要分析RocketMQ中最重要的4大组件namesrvbrokerproducerconsumer。通过idea打开RocketMQ工程有如下包我们需要重点关注的包有broker源码存放在rocketmq-broker包中producer和consumer的源码存放在rocketmq-client中。

2023-04-07 08:54:27 356

原创 【RocketMQ | 源码分析】Broker是如何将路由信息注册到namesrv

Namesrv主要作用就是为消息生产者和消息消费者提供关于topic的路由信息,Namesrv就需要具备路由基础信息管理,Broker节点管理等功能。Namesrv本身是一个无状态的节点,本文我们通过一起来看Broker是如何将信息注册到Namesrv上。路由元信息保存在,它存储的信息见下面信息。

2023-04-06 08:50:07 333

原创 【RocketMQ|源码分析】namesrv启动&停止过程都做了什么

namesrv在是RocketMQ中一个十分重要的组件,它相当于是Kafka中的zookeeper,Spring Cloud Alibaba中的nacos。它的主要作用是为消息生产者和消息消费者提供关于topic的路由信息。namesrv具有存储路由信息,并且能够管理broker节点(路由注册,路由删除等功能)。

2023-03-28 22:33:07 523

原创 【RocketMQ|源码分析】Producer中延迟故障机制

RocketMQ中的延迟故障机制是为了帮助Producer能够通过消息发送延迟或者消息发送结果主动感知Broker忙碌或者故障,消息发送延迟或者消息发送失败时可以将Broker排除在选择列表之外。这个机制默认是不开启的,如果需要开启这个机制需要在创建Producer时主动开启。

2023-03-27 07:00:00 377

原创 【RocketMQ|源码分析】Producer是如何选择路由队列的?

消息发送到RocketMQ服务器涉及到下面几个概念生产者生产者是消息生成的实体主题(Topic)Topic是消息传输和存储的顶层容器,通常用于标识同意类型的业务逻辑消息,它是由多个队列组成,消息的存储和水平扩展是通过Topic内队列来实现的。队列(MessageQueue)队列是消息存储和传输的实际单元容器,它相当于Kakfa中的分区(partition)。MessageQueue代码如下所示,它主要包含topic,brokername,queueId三个属性。

2023-03-26 09:00:00 387

原创 【RocketMQ|源码分析】Producer是如何发送消息的?

Producer是RocketMQ中的消息发送者,本篇文章将介绍Producer是如何将消息发送到broker中。先看下官方文档中的例子,消息推送总共包括4个步骤创建Producer对象,并设置namesrv启动producer推送消息关闭producer// 1. 创建producer DefaultMQProducer producer = new DefaultMQProducer(PRODUCER_GROUP);

2023-03-25 10:40:15 283

原创 ThreadPoolExecutor简介&源码解析

线程池是一种基于池化思想管理线程的工具。随着多核CPU成为主流,多线程并行处理任务逐渐成为了开发小伙伴在工作中提升服务器处理任务能力的必备技能。

2023-02-27 21:36:54 246 1

精通Spring 4.x企业应用开发实战

本书是在《精通Spring 3.x——企业应用开发详解》的基础上,历时一年的重大调整改版而成的,延续了上一版本“追求深度,注重原理,不停留在技术表面”的写作风格,力求使读者在熟练使用Spring的各项功能的同时透彻理解Spring的内部实现,真正做到知其然并知其所以然。此外,本书重点突出了“实战性”的主题,力求使全书内容体现“从实际项目中来,到实际项目中去”的写作原则。

2018-07-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除