自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

chudaxiakkk的专栏

不鸣则已,一鸣惊人

  • 博客(74)
  • 资源 (1)
  • 收藏
  • 关注

原创 rocketmq-broker-启动流程

这只是启动过程中的内容。预计运行过程中,还会有其他任务。根据上面的分析,可以清晰看到rocketmq。

2025-02-19 18:29:17 124

原创 rocketmq-netty通信设计-request和response

默认情况下:eventLoopGroupBoss线程池1个线程,负责channel的链接eventLoopGroupSelector线程池3个线程,负责IO处理defaultEventExecutorGroup线程池8个线程,负责请求的RemotingCommand编解码NettyRequestProcessor绑定的ExecutorService,默认8个线程,负责处理RemotingCommand的业务处理证据如下。以下是nameServer的启动线程截图。

2025-02-13 18:30:41 770

原创 rocketmq-product-send方法源码分析

product的发送有几种API模式,其实目的都是为了选择MessageQueue默认的发送,是根据topic的队列,做负载均衡的方式,topicPublishInfo内部维护着ThreadLocalIndex对象,做线程级别的负载均衡。而且默认都3次重试机会,意味可以选择不同队列做发送;指定messageQueue,是调用方明确知道发送的MessageQueue,这种失败不会做重试;

2025-01-25 23:49:10 910

原创 rocketmq-MQClientInstance-单进程多生产者组多消费者组的实例模型

查看上图,关键点,在于rocketmq.client.name的配置。默认是DEFAULT,会导致倍数增长。修改后,所有group会共用同一个MQClientInstance。当一个client,订阅多个consumergroup、多个productgroup时。事实上,rocketmq的client端,默认就是倍数增长的。如果没去关注,那么可能就出现程序响应迟钝了。假设订阅2个consumergroup, 线程数量是2倍增加吗?订阅多个,那线程增长就恐怖了。消费者组,是有多个线程去共同协作的。

2025-01-22 18:07:31 277

原创 rocketmq-product-DefaultMQProducer启动流程

1、将producerGroup注册到org.apache.rocketmq.client.impl.factory.MQClientInstance#producerTable变量上。3、启动定时器任务RequestHouseKeepingService1处理响应超时的消息。2、启动定时器任务现成MQClientFactoryScheduledThread。比较简单,不做详细分析了。使用arthas如下。

2025-01-22 17:55:58 429

原创 rocketmq-nameserver-DefaultRequestProcessor详细解读

往topicQueueTable,将注册的brokerName,master节点的topic信息上报到nameserver。前一篇文章,介绍nameserver启动流程,会谈到。包含的brokerName,没有的话,就添加上去。第二步,是检查brokerName的主从节点。第三步,当brokerName的主节点(brokerId = 0)注册时,请求体包含topic信息,更新。前面的步骤没有说,是因为暂时不清楚作用。往brokerAddrTable,相同brokerName情况下,添加主从的信息。

2025-01-15 00:03:25 638

原创 rocketmq-nameserver-启动流程-定时任务-分析

RouteInfoManager内存中,有几个成员变量map,管理topic、broker、心跳等。product、consumer、broker的rpc请求,都会进入该方法。我用的版本是4.9.8,namesrv模块,只有6个文件。这张图,描述了启动的执行流程和定时任务。功能也就意味着比较少。启动流程比较简单,不做详细分析了。使用arthas分析。

2025-01-12 11:51:42 438

原创 Rocketmq 探索MQClientFactoryScheduledThread线程工作

代码如下。

2025-01-06 17:53:36 912

原创 rocketmq-pull模式-消费重平衡和拉取PullTaskImpl线程

后续有空再总结。主要是比较push和pull模式。

2025-01-04 23:32:42 682

原创 rocketmq-push模式-消费侧拉取线程-PullMessageService分析

初始的拉取请求,来源于重平衡线程RebalanceService创建的PullRequest。这里解析下PullRequest的业务含义。比如有一个topic叫TopicAAA,它在3个broker上分别有4个读队列,意味着这个topic下有12个队列。保存在RebalanceImpl的成员变量ConcurrentMap> topicSubscribeInfoTable。假设消费者组有4个client组成。

2024-12-31 17:25:33 1007

原创 rocketmq-push模式-消费侧重平衡-类流程图分析

首先启动时,会从nameserver获取topic的所有queue。这些queue分布在多个broker上。构建了mqSet。再随机从一个broker上,获取当前消费者组,包含的所有消费者List cidAll。将两者排序,根据分配策略,分配当前消费者负责的队列。(比如总共12个队列,4个消费者。当前消费者,负责 4,5,6队列)。如此看,是客户端重平衡。通过排序然后策略分配的方式,实现消费者互不通信的条件下协同合作。启动时,内存都是空,所以会触发构建PullRequest请求体。

2024-12-27 19:00:52 1042

原创 记录spring-boot 3.X版本整合RocketMq

我是从github上fork后下载到本地。使用idea启动nameSrv和broker。注意使用spring-boot 3.x版本后,jdk必须要17以上。所以本地需要安装jdk17。rocketMq我用的是最新的4.X版本4.9.8。版本信息是如何选择的呢?看rocketMq官网。新增application.yml文件。启动就可以看到如下,正常的生产和消费。使用spring-boot的初始化。创建工程并下载放到父工程子目录下。

2024-11-21 22:25:44 1693

原创 缓存数据库一致性解决办法

所谓缓存,实际上就是用空间换时间,准确地说是用更高速的空间来换时间,从而整体上提升读的性能。这篇文章讨论的是 Redis 与 MySQL 的缓存不一致问题,事实上就算是本地缓存,也是一样的问题。根据CAP理论,要实现强一致性,就要牺牲可用性,这会极度降低系统性能。而使用缓存,本地就是为了提升性能。如此,目标是实现最终一致性,并且尽可能降低不一致的时间。

2024-11-19 15:54:51 690 1

原创 配置中心nacos_no1_demo实战

nacos单机部署单机server端部署我本地下载的是2.0.4版本<revision>2.0.4</revision>与springcloud结合nacosSpring Cloud Alibaba VersionSpring Cloud VersionSpring Boot Version2.0.42.2.7.RELEASE*Spring Cloud Hoxton.SR122.3.12.RELEASE版本匹配后,着手开发demo。&

2022-02-28 23:27:12 413

原创 spring-cloud-alibaba学堂准备

学习范围查看wiki 版本说明要学的有5个组件。SentinelNacosRocketMQDubboSeata学习目标关注组件对外提供的特性。1、微服务中的定位2、架构实现分析3、性能参数与同类产品的实现区别,优缺点4、功能特性原理分析5、开发关注的对外暴露的接口,配置属性6、本地完成demo测试方法论1.本次目的是全面掌握spring-cloud-alibaba功能特性。当团队有技术选型的时候,能够准确地判断是否合适2.基于第一点,暂时不做源码级别的原理分析3.参考

2022-02-22 21:28:46 262

原创 spring-boot Fat JAR启动原理

1.FAT JAR目录结构解压后结果drwxr-xr-x 5 hjq staff 160 Dec 3 09:57 .drwxr-xr-x 10 hjq staff 320 Dec 4 11:42 ..drwxr-xr-x 5 hjq staff 160 Dec 2 23:41 BOOT-INFdrwxr-xr-x 5 hjq staff 160 Dec 2 23:41 META-INFdrwxr-xr-x 3 hjq staff 96 Feb 1

2021-12-04 16:46:18 741

原创 java char双字节如何存储Unicode字符

计算机世界,都是二进制组成。最早期,美国出了ascii码标准,只需要1个字节,最多表示128个字符,支持了英语的字符集。全世界这么多国家,这么多种语言,肯定不够。欧洲出了iso编码标准,咱们中国出了gbk,支持中文。编码混乱,自然就要做统一编码标准。所以诞生了Unicode编码,它目标是给全世界所有符号都编码,都有一个唯一的编码。也名万国码,单一码。它总共有三个字节,第一个字节表示平面,设计了17个平面。后两个字节,是实际数据。两个字节,最多表示65536个字符。17个平面,就是最多能表达1百多万个字符。

2021-11-03 10:39:24 548

原创 Innodb的文件

1.参数文件,指向哪里找到数据库文件,初始化参数等2.日志文件。错误日志文件,二进制日志文件,慢查询日志文件,查询日志文件等3.socket文件 UNIX域套接字进行连接时需要的文件4.pid文件 MYSQL实例的进程ID文件5.MYSQL表结构文件 存放mysql表结构定义文件6.存储引擎文件:会有自己的文件保存各种数据,存储了数据和索引参数文件先去读一个配置参数文件。用来寻找数据库各种文件所在位置。mysql --help | grep my.cnf数据库参数包含两类。动态参数,运行

2021-10-22 09:16:41 146

原创 mysql存储引擎区别

FeatureMyISAMBDBMemoryInnoDBArchiveNDB单表存储限制NONOYES64TBNONOtransactios(提交,回滚)NOYESNOYESNONOlock granularity粒度tablepagetablerowrowrowmvcc/snapshot readyesyesyesGeospatial supportYesB-tree indexesY...

2021-10-18 16:34:44 92

原创 mysql慢查询定位 执行计划分析 sql执行顺序

1.慢查询定位:mysql已经内置了慢查询记录功能。默认关闭,需要打开的话,通过系统参数配置。1.修改配置文件my.ini,[mysqld]log_output='FILE,TABLE'slow_query_log='ON'long_query_time=0.0012.命令设置,但是mysql重启后会丢失该配置SET GLOBAL slow_query_log = 'ON';SET GLOBAL log_output = 'FILE,TABLE';SET GLOBAL long_qu

2021-09-03 17:55:16 217

原创 java线程的6种状态.源码有铁证

最近面试多次被问到线程状态了。以前有些印象,但是一直没有深究。回答的不如人意。所以来一次源码探究。最讨厌就是网络的文章,一个个说的有头有脸,线程状态也是命名各种差异。线程的状态,明显是一个枚举类型,所以jdk源码上就有了。java.lang.Thread.State,是Thread类定义的内部类/**A thread state. A thread can be in one of the following states:NEW A thread that has not yet starte

2021-08-20 17:33:22 225

原创 jdk1.8特性介绍和代码例子

java是歪果仁发明的,现在sun公司已经被oracle收购。原来已经好久了。以前总以为java历史久远,其实还没有我年纪大。我想多尝试尝试英语环境。还是多用google和facebook吧ok。java 8 new Feature in oracle,大家一起看看老外的原文。https://www.oracle.com/java/technologies/javase/8-whats-new.html世界好复杂呀,我发现自己也就是单细胞生物,想的太多,做的太少,还是好好专注自己的一亩三分地。做能

2021-08-12 13:56:28 217

原创 Nacos 集群部署模式理解(记录)

nacos部署有三种模式。最近在研究nacos,看到客户端链接服务端。官网的快速开始,只谈到单机模式的情况下,很好理解。客户端上添加配置ip和端口但是生产环境如何部署?client如何服务发现?nacos集群如何负载均衡?带着问题,我查找了资料。第一种,直连模式:生产环境部署模式:nacos集群部署N台客户端链接方式:集群ip和端口,都写在配置文件上。随机选择一台nacos节点通信,实现负载均衡;优点:清晰明白了,没有引入额外的组件。适合中小项目,快速部署和运维缺点:当nacos部署变

2021-05-28 14:49:38 1265

原创 nacos2.0.1 配置中心 使用grpc源码分析

经过大佬指点,选择直接看nacos2.x版本源码,探讨最新的实现方式。1.nacos2.x的架构实现对比1.X的架构,主要是提供了grpc的长连接实现。grpc官网传送门grpc是一个语言无关,平台无关的rpc实现框架,谷歌开源,支持多种编程语言。使用HTTP2.0的特性,支持长连接,服务端推送,header压缩,多路复用。HTTP2.0特性介绍从架构图可以看到,2.x框架,主要是添加了grpc通信实现,是兼容1.x版本。使用grpc,主要是为了解析1.x框架下,http连接带来的.

2021-05-25 18:58:52 6999 2

原创 归并排序和堆排序 java实现

归并排序官方介绍归并排序(Merge Sort)是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。用自己的话形容:给一个无序集合数组,使用分治思想,二分法进行拆分,将大问题拆分成小问题,从上往下把问题集合缩小到一,再从下往上,陆续把两个集合归并。从而得到一个有序集合。它的时间复杂性是O(n

2021-04-21 12:20:42 229

原创 nacos-client 监听配置源码分析

配置监听,是要重点分析,代码稍微复杂一些。 /** * Add a listener to the configuration, after the server modified the configuration, the client will use the * incoming listener callback. Recommended asynchronous processing, the application can implement the g

2021-04-12 18:40:35 795 2

原创 nacos-client 推送和移除配置源码

String url = Constants.CONFIG_CONTROLLER_PATH; Map<String, String> params = new HashMap<String, String>(6); params.put("dataId", dataId); params.put("group", group); params.put("content", content); param.

2021-04-12 15:16:34 644

原创 nacos-client 获取配置源码分析

上一篇关于nacos-client启动的分析这一篇文章,是介绍获取配置的实现方式。查看接口com.alibaba.nacos.api.config.ConfigService /** * Get config. * * @param dataId dataId * @param group group * @param timeoutMs read timeout * @return config value

2021-04-12 14:20:47 1652

原创 nacos-client 配置管理ConfigService启动源码分析

当前使用的nacos-client版本是1.4.1看我的上一篇文章,获取nacos java sdk 使用demo我们知道,nacos两大功能是配置管理和服务发现。这篇文章,是介绍配置管理ConfigService启动分析的。生成配置服务类ConfigService//指定nacos服务地址String serverAddr = NacosServerProperties.serverAddr;String dataId = "provider-server";String gr.

2021-04-09 00:07:30 743

原创 nacos java sdk 使用demo

上一篇,介绍了nacos服务端,客户端和springCloud的版本选择。我研究nacos,计划是先把客户端琢磨透,再去看服务端源码。目录1.看官网说明2.跟随官网写demo配置管理demo服务发现demo我的源码下载1.看官网说明java sdk我选择的版本是最新的稳定版本1.4.1<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client -->...

2021-03-28 22:07:35 1023

原创 nacos服务端、客户端和springCloud版本说明

最近看消息,nacos已经推出2.0,性能比1.x版本要强十倍。暂时还是选择1.x版本作为我研究的对象,后续再看2.0的新特性。现在nacos1.x的最新Release版本是1.4.1.对于读者的项目,springCloud的版本都不一致。那么我们如何寻找对应的nacos版本呢。还是那句话,不懂得就看官网,再串联起来。nacos服务端版本第一步,先看springCloud版本springCloud官网 https://spring.io/projects/spring-cl...

2021-03-28 10:10:59 17484 3

原创 Hashtable扩容,源码阅读

这篇文章,是笔者学习hash源码的笔记,写作的过程,利于知识梳理,找到盲区。将会分三篇文章。这是第一篇,讲解hashtable扩容。虽然hashtable已经被ConcurrentHashMap取代了,但是源码简单,利于我们理解hash的实现方式。先看hashtable的结构图...

2021-02-24 17:49:06 994

原创 记录postgresql 模糊查询、索引字段使用函数走索引

近段时间,生产环境,数据库质量小组给出了一份sql名单,要优化。主要问题是有两种:大表全表扫描、禁止在索引列上使用函数。大表全表扫描,分三种情况。1、分页查询 limit pageSize offSet pageStart;2、where条件字段没有加索引3、where条件字段是模糊查询第一种情况,暂时还找不到好的办法.不是我们组的sql,所以先忽略;第二种情况,对应字段加索引就行。pg库索引的默认数据结构是b-tree;第三种情况,印象中,模糊查询是不能走索引的。查资料后,发现pg库是可以

2020-11-18 09:05:33 2920

原创 网页布局,左右分栏实现——原来是响应式的锅

开发博客系统,现在要开发 “用户个人空间页”。这次参考csdn的布局它是分左右两栏。它是通过display:left 、 display:right来做左右的。在我个人实践时,当缩小浏览器窗口,**右侧的文章栏 会自动换行。**导致页面很难看我是用bootstrap4 UI框架的。csdn很多页面也是用bootstrap4。通过F12,可以看到class 确实是使用了container但是,这里确实没有用到bootstrap4,而是自定义 响应式属性。导致和我自己引入bootstrap4的

2020-05-21 07:53:49 3459

原创 Spring Security获取登录信息

SecurityContextHolder.getContext().getAuthentication();authentication.getPrincipal()SecurityContextHolder是用于保存SecurityContext。securityContext是一个threadLocal变量authentication包含认证信息Principal是一个Object类型,代用账号密码认证方式时,运行时绑定的是org.springframework.security.core

2020-05-19 14:40:25 608

原创 搭建hive-1.2.2和hadoop2.7.7单机模式

hive依赖hadoop环境。第一步,搭建hadoop环境下载:hadoop-2.7.7下载解压,拷贝到安装目录:注意自己的目录tar -zxvf hadoop-2.7.7.tar.gzmv hadoop-2.7.7 hadoopcp -R hadoop /user/local/soft配置hadoop环境变量JAVA_HOME=/usr/jdkJRE_HOME=/usr/jd...

2020-05-02 09:51:25 525

原创 oauth2 +jwt,password密码授权模式 spring boot 2.x

11111

2020-03-25 07:22:04 2145

原创 计算机科学导论第三版 1-5章随笔

下笔前,我在思考,到底随笔要写什么。计算机科学和人文文章,有诸多区别。我们日常接触的新闻媒体,文章,往往有固定的主题,很多文字,是不言自明的。也就是说废话很多。然后,技术书籍,它也有主题,主题确是非常的抽象,它的组成,是一个又一个知识点组成。这些知识点,属于“复合对象”,理解它们比较困难。知识体系,相当于搭建积木,上层(较高抽象)需要下层(较低抽象)支撑。日常生活接触到的知识,层次相对较少;技...

2019-09-10 19:31:07 658

原创 JAVA 注解 介绍

一、来源是什么从JDK1.5之后,开始支持注解。注解的出现,提供配置的功能。往往使用XML来做配置的功能。但是XML意味着要读取文件,编写比较麻烦。而很多场景下,class需要的是简单的配置,而且方便地使用。注解在编译中,嵌入到字节码上。使用java的反射机制,获取到注解。这个机制,从语言层面进行配置支持,极大方便了程序开发,并且被spring、dubbo、mybatis、netty等各...

2019-03-15 16:13:27 283

原创 希尔排序和快速排序,java实现

希尔排序(shell sort)又称为缩小增量排序(diminishing increment sort)。该算法是泛华的插入排序,这是重点。插入排序在输入序列几乎有序的情况下非常高效,希尔排序分多路并使用不同的间距来比较相邻元素,逐步减少间距,最终以1为间距执行一次插入排序。每减少一次间距,序列就会越加相对有序。最后使用插入排序,使得整体有序。 public static...

2019-02-11 21:35:53 269

数字电路与系统设计课后答案

数字电路与系统设计课后答案数字电路与系统设计课后答案

2011-05-10

空空如也

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

TA关注的人

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