- 博客(110)
- 资源 (1)
- 收藏
- 关注
原创 浅聊 ConfigurationClassPostProcessor、浅用SpringBoot 自动配置
SpringBoot自动配置的意义 通过条件化配置机制,根据项目依赖与环境自动装配组件,消除手动配置样板代码。ConfigurationClassPostProcessor的作用 作为BeanFactoryPostProcessor的核心实现:配置类解析:处理@Configuration类,解析@ComponentScan、@Bean等注解。注册Bean定义:将@Import引入的配置类、@Component扫描的组件转化为BeanDefinition动自动配置:处理@EnableAutoConfig
2025-03-06 11:15:32
712
原创 Dubbo高级特性
Dubbo框架提供了对服务调用结果进行缓存的特性,用于加速热门数据的访问速度,Dubbo 提供声明式缓存,以减少用户加缓存的工作量。为了使 Dubbo 能够识别你的自定义缓存工厂,你需要在 `META-INF/dubbo` 目录下创建一个文件,文件名为 `org.apache.dubbo.cache.CacheFactory`,并在文件中指定你的实现类。最后,你需要在 Dubbo 的配置文件中指定使用自定义的缓存工厂。这个接口定义了缓存的基本操作,如 `put`、`get` 和 `remove`。
2025-01-07 13:36:35
750
原创 Dubbo扩展点加载机制
加载机制中已经存在的一些关键注解,如@SPI、©Adaptive> ©Activateo然后介绍整个加载机制中最核心的ExtensionLoader的工作流程及实现原理。最后介绍扩展中使用的类动态编译的实现原理。
2025-01-03 17:49:30
800
原创 利用 Python 从 weixin 公众号下载保存有声小说
本人在喜播平台上关注学习到评书,觉得十分精彩。奈于平台上作评文件不完整,于是联系到作者寻求完整的资源。但公众号资源播放时候只能点进去,十分不方便。于是博主我苦练Python 大法,将音频文件下载到本地。这样就能连续的收听了。
2024-05-08 14:24:13
700
1
原创 Spring 自定义注解 为 BeanDefinition 添加 qualifier 信息 从而约束自动装配范围
Spring 自定义 qualifier 规则
2024-03-26 15:29:21
457
原创 rocketmq Listener 还可以这样配置(基于SPEL\限定符号\自动连线)
对于项目中多个消息消费者\消息监听者, 关于对消息选择及处理的优雅方法
2024-03-05 16:34:53
1137
原创 Java 每个ClassLoad 加载的文件(夹)都有哪些
Java 每个ClassLoad 加载的文件(夹)都有哪些 我们主要是查看 URLClassPath 下的URLs
2023-09-13 11:20:28
194
原创 Java平台标准版 8 文档
JDK 8 是 JRE 8 的超集,包含 JRE 8,以及编译器和调试器等工具,如 开发小程序和应用程序。JRE 8 提供了库, Java 虚拟机 (JVM) 和其他运行小程序的组件 以及用 Java 编程语言编写的应用程序。注意 JRE 包含 Java SE 不需要的组件 规范,包括标准和非标准 Java 组件。Java 平台标准版 8 文档 (oracle.com)
2023-07-31 13:48:43
961
原创 Netty 进阶
魔数,用来在第一时间判定是否是无效数据包版本号,可以支持协议的升级序列化算法,消息正文到底采用哪种序列化反序列化方式,可以由此扩展,例如:json、protobuf、hessian、jdk指令类型,是登录、注册、单聊、群聊... 跟业务相关请求序号,为了双工通信,提供异步能力正文长度消息正文编解码器根据上面的要素,设计一个登录请求消息和登录响应消息,并使用 Netty 完成收发@Slf4j@Override// 1. 4 字节的魔数// 2. 1 字节的版本,
2023-06-20 15:15:51
736
原创 Netty 入门
详细分析如下起点,对于 NIO 实现来讲,在 io.netty.channel.nio.AbstractNioByteChannel.NioByteUnsafe#read 方法中首次创建 ByteBuf 放入 pipeline(line 163 pipeline.fireChannelRead(byteBuf))入站 ByteBuf 处理原则对原始 ByteBuf 不做处理,调用 ctx.fireChannelRead(msg) 向后传递,这时无须 release将原始。
2023-06-15 20:49:54
444
原创 NIO 基础
适合连接数特别多,但流量低的场景(low traffic)TLV 格式,即 Type 类型、Length 长度、Value 数据,类型和长度已知的情况下,就可以方便获取消息大小,分配合适的 buffer,缺点是 buffer 需要提前分配,如果内容过大,则影响 server 吞吐量。一种思路是首先分配一个较小的 buffer,例如 4k,如果发现数据不够,再分配 8k 的 buffer,将 4k buffer 内容拷贝至 8k buffer,优点是消息连续容易处理,缺点是数据拷贝耗费性能,参考实现。
2023-06-13 10:55:49
1160
原创 Java网络编程(UDP、TCP)
什么网络编程?计算机跟计算机之间通过网络进行数据传输。常见软件架构有哪些?CS/BS通信的软件架构CS1BS的各有什么区别和优缺点CS:客户端服务端模式需要开发客户端BS:浏览器服务端模式不需要开发客户端。CS:适合定制专业化的办公类软件如:IDEA、网游BS:适合移动互联网应用,可以在任何地方随时访问的系统。网络编程三要素分别是什么?IP、端口号、协议网络编程三要素分别表示什么?IP:设备在网络中的地址,是唯一的标识端口号:应用程序在设备中唯一的标识。协议。
2023-05-16 16:17:07
1018
原创 Chapter13-基于 Netty 的通信实现
本章介绍了 RocketMQ 底层通信的实现机制,由于它是基于 Netty 来实现的,所以首先介绍了 Netty 的基础知识。 Netty 被用在很多开源软件的底层通信部分, RocketMQ 以 Netty 为基础,还实现了一种机制,把通信功能和消息处理功能分离,不同类型的通信内容被抽象成发送带有对应类型代码的 Command,同时根据类型代码查找对应的 Processor 和 Executor 来执行,结构非常清晰,为我们自己实现网络通信程序提供了参考。
2023-04-20 13:58:03
632
原创 Chapter12-主从同步机制
本章分析了 Master 和 Slave 角色的 Broker 之间同步信息功能的实现。 需要同步的信息分为两种类型,实现方式各不相同:一种是元数据信息,采用基于Netty 的 command 方式来同步消息;另 一种是 commitLog 信息,同步方式是直接基于 Java NIO 来实现。
2023-04-19 13:56:48
410
原创 Chapter11-最常用的消费类
本章分析的是 Client 模块里的代码 ,我们在使用 RocketMQ 的时候 , 更多的是和这个模块里 的代码打交道。 本章重点分析了 DefaultMQPushConsumerlmpl类 , 然后分析了 Consumer 的并发处理过程 ,最后分析了客户端 Class 统一的底层通信类 MQClientlnstance 。
2023-04-19 10:50:28
494
原创 Chapter10-NameServer 源码解析
本章分析了 NameServer 模块的源码, NameServer 是一个功能重要但是代码量不大的模块,所以选择这个模块入手,比较容易理解。 我们在分析源码时,认真读懂一个模块后就可以对作者 的代码风格 、设计偏好等有基本的了解 。
2023-04-18 15:13:50
524
原创 Chapter7-吞吐量优先的使用场景
本章重点关注性能,关注在大消息量的情况下,如何提高 RocketMQ 的吞吐量 。 首先介绍了消息过滤,在服务端进行消息过滤可以减少无效消息传输造成的带宽浪费, Tag 是最常用的一种高效过滤方式,此外还可以用 SQL 表达式、FilterServer 来过滤消息 。另一个提高吞吐量 的方法是增加集群 的机器数量,提高并发性,要根据实际场景增加 Broker 、 Consumer 或 Producer 角色的机器数量 。
2023-04-18 13:26:15
259
原创 Chapter6-可靠性优先的使用场景
本章根据使用场景,讨论如何“可靠”地收发消息 。 即在要求消息顺序的场景下,如何既能并发执行,又能保证消息顺序;然后分析在可能的故障场景下,如何应对以保证不丢消息 、 不中断服务。 RocketMQ 在设计上,有重试机制来保证消息不丢,造成的结果是可能存在消息重复,这一点需要用户根据具体业务场景来处理。
2023-04-17 16:27:10
334
原创 Chapter5-消息队列的核心机制
本章介绍了 RocketMQ 消息队列实现的难点及核心,即“队列”本身的实现,基于磁盘做一个读写效率高 的队列并非易事,实现不好就会使磁盘操作成为 整个系统 的瓶颈,无法提升系统 的 吞吐量 。 RocketMQ 基于“顺序写”“随机读”的原则来设计,利用“零拷贝”技术,克服了磁盘操作的瓶颈。另一个难点是为了高可用性而设计的主从机制,数据被及时复制到多个机器,这样当一台机器出故障后,整体系统依然可用 。 这样可靠性和性能能直接有个权衡, RocketMQ 把选择权留给用户
2023-04-17 10:53:35
170
原创 《RockectMQ实战与原理解析》Chapter4-分布式消息队列的协调者
分布式消息队列的协调者的内容包括NameServer 的功能:集群状态的存储结构、状态维护逻、;各个角色间的交互流程:交互流程源码分析、为何不用 ZooKeeper ;底层通信机制:Remoting 模块、协议设计和编解码、Netty库。
2023-04-17 09:50:09
453
原创 Chapter3-用适合的方式发送和接收消息
本章介绍了ROcketMq 的不同类型的消费者:DefaultMQPushConsumer 的使用、处理流程、流量控制、的启动 、关闭流程;不同类型的生产者:DefaultMQProducer、发送延迟消息、自定义消息发送规则、对事务的支持;如何存储队列位置信息;自定义日志输出
2023-04-14 15:02:18
508
原创 Java解析XML-JDK-JAXB官方指导文档
JAXB(Java Architecture for XML Binding)是J2SE和J2EE平台的一部分,让开发者能够快速完成Java类和XML的互相映射。JAXB 允许Java人员将Java类映射为XML表示方式。其实,JAXB是一个业界标准,是一项可以根据XML Schema产生Java类的技术,并且可以将Java对象树的内容写到XML文档中。
2022-12-11 13:39:03
636
原创 Spring Boot 入门
Spring Boot 是利用了自动配置类来简化了 aop 相关配置AOP 自动配置类为可以通过禁用 aop 自动配置AOP 自动配置的本质是通过来开启了自动代理,如果在引导类上自己添加了那么以自己添加的为准的本质是向容器中添加了这个 bean 后处理器,它能够找到容器中所有切面,并为匹配切点的目标类创建代理,创建代理的工作一般是在 bean 的初始化阶段完成的。
2022-11-24 23:01:55
915
原创 MyBatis拦截器 Interceptor 实现多数据源切换
http://AbstractRoutingDataSource详解数据源配置与切换// 主库-读数据源master,// 主库-写数据源slave,// 多数据源readmore}/*** 数据源路由器*/// 也可以指定 ThreadLocal 的 initialValue 的具体实现}/***将targetDataSources映射中指定的给定查找键对象解析为用于与当前查找键匹配的实际查找键。
2022-10-20 18:33:03
3603
原创 SpringMVC
DispatcherServlet 是在第一次被访问时执行初始化, 也可以通过配置修改为 Tomcat 启动后就初始化 registrationBean.setLoadOnStartup()首先创建了 Servlet 容器,其次创建了 Servlet 的前端控制器,最后将 容器和控制器进行组合。每个具体的init的方法中都会去收集自定义的 Resolver 如果没有则会加载默认的配置。调用控制器方法、并处理方法参数与方法返回值。可查看 Tomcat 启动日志查看。
2022-10-14 10:16:31
711
原创 MyBatis 架构分析 TypeHandler(枚举转换、数据加密模糊查询)、Cache(分布式系统二级缓存)、Interceptor(插件开发)
mybatis默认定义了一批TypeHandler,正常情况下这些TypeHandler就可以满足我们的使用了.mybatis通过来管理TypeHandler。
2022-10-08 22:57:26
2358
2
原创 Spring Bean的生命周期、Java配置BeanFactoryPostProcessor失效与解决
到底什么是 BeanFactory它是 ApplicationContext 的父接口它才是 Spring 的核心容器, 主要的 ApplicationContext 实现都【组合】了它的功能,【组合】是指 ApplicationContext 的一个重要成员变量就是 BeanFactoryBeanFactory 能干点啥表面上只有 getBean实际上控制反转、基本的依赖注入、直至 Bean 的生命周期的各种功能,都由它的实现类提供。
2022-10-03 20:31:52
3459
5
原创 通用枚举转换的实现 BaseTypeHandler、@MappedTypes背后的执行逻辑-ibatis
通用typehandler的配置、@MappedTypes的使用注意
2022-09-28 16:18:06
3184
原创 Spring 单例注入其它 scope 的四种解决方法 &@Scope 源码解读
Spring Bean定义时的 作用范围Scope的可选值&默认值、以及单例Bean 注入其他几种作用范围Bean时候保证 Scope 正确被使用的方法。其实是推迟 Bean 的获取
2022-09-24 23:33:12
659
原创 简单使用ThreadLocal、FunctionalInterface、CompletableFuture
数据迁移、涉及上万条数据,使用Job利用多线程处理。ThreadLocal的引入不必有多少条数据处理New 多少个Req对象 CompletableFuture 还使用以下策略实现接口CompletionStage,then***方法 可将一个任务产分成多份。代码中。将下载-》上传-》更新 拆分成了三部分。方便日志的记录 使用了CompletionStage handleAsync()方法对以上三步进行异常总结 为了记录成功、失败、异常的次数使用了atomic的LongAdder...
2022-06-24 16:57:53
562
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人