解读RocketMQ 5.0全新的高可用设计
[toc]
高可用架构演进背景
在分布式系统中不可避免的会遇到网络故障,机器宕机,磁盘损坏等问题,为了向用户不中断且正确的提供服务,要求系统有一定的冗余与容错能力。RocketMQ 在日志,统计分析,在线交易,金融交易等丰富的生产场景中发挥着至关重要的作用,而不同环境对基础设施的成本与可靠性提出了不同的诉求。
在 RocketMQ v4 版本中有两种主流高可用设计,分别是 主备模式的无切换架构 和 基于 Raft 的多副本架构(图中左侧和右侧所示)。
生产实践中我们发现,两副本的冷备模式下备节点资源利用率低,主宕机时特殊类型消息存在可用性问题;而 Raft 高度串行化,基于多数派的确认机制在扩展只读副本时不够灵活,无法很好的支持两机房对等部署,异地多中心等复杂场景。RocketMQ v5 版本融合了上述方案的优势,提出 DLedger Controller 作为管控节点(中间部分所示),将选举逻辑插件化并优化了数据复制的实现。

dubbo泛化调用使用及原理
AIGC
实用:优雅设计接口版本号
转载自:https://blog.mariojd.cn/how-to-design-spring-boot-api-version-number-elegantly.html
一般来说,系统上线以后,需求仍会发生变动,功能也会迭代更新。可能是接口参数发生变更,也有可能是业务逻辑需要调整,如果直接在原来的接口上进行修改,必然会影响原有服务的正常运行。
常见的解决方案,是在接口路径中加入版本号用于区分,此外还可以在参数甚至 header 里带上版本号。这里以在请求路径中带上版本号为例,如:http://IP:PORT/api/v1/test ,v1 即代表的是版本号。当然了,可以像这样,直接写死在 @RequestMapping("api/v1/test")属性中,不过下面提供了更为优雅的解决方案。
1.自定义版本号标记注解

浅析AOP源码(二)
转载自:https://blog.csdn.net/luanlouis/article/details/51155821
1、Spring内部创建代理对象的过程
在Spring的底层,如果配置了AOP,Spring会为每一个Bean创建一个对应的ProxyFactoryBean的FactoryBean来创建某个对象的代理对象。
假定有一个接口TicketService及其实现类RailwayStation,打算创建一个代理类,在执行TicketService的方法时的各个阶段,插入对应的业务代码。
1 | public interface TicketService { |
由RedisTemplate事务enableTransactionSupport引发的血案
转载自:https://carlzone.blog.csdn.net/article/details/108629864
在最近的项目当中因为使用了类似字典表的数据,所以使用的 Spring Farmework 当中的 Cache 抽象,通过 Redis 来做为缓存。
因为原有项目当中配置了 Redis,而且项目是基于 Spring Boot 构建的,并没有去除 Redis 的自动依赖(RedisAutoConfiguration)。导致有些 Redis 的有些类是基于项目中自己配置的 RedisTemplate,而有些又是引用的 Spring Boot 中 Redis 的自动配置生成的 RedisTemplate。所以就把 Spring Boot 中的 Redis 自动配置去除了。
记一次HandlerMethodArgumentResolver失效的问题
起因:
对代码进行重构,把解析token的方法从Controller迁移到自定义的参数解析器中,实现代码复用。
问题:
按照正常流程搭建自定义参数解析器,发现最终请求未进入该自定义参数解析器。
Controller
1 | @PostMapping |
浅析AOP源码
AOP(Aspect-Oriented Programming)面向切面的编程,在平时的开发过程中,AOP其实用到的地方一般有:
①用来做日记的处理
②方法的调用统计
③业务层面的读写分离(例如自定义的Annotation+AOP可以实现切换数据源)
④自定义权限拦截器
在Spring框架中,AOP则发挥了不少功效,例如spring的事务。
AOP具体的介绍移步:https://blog.csdn.net/zero__007/article/details/46765191
Java Parser介绍
[toc]
Java Parser基本信息
JavaParser是一个Java库,用于将Java源代码解析为抽象语法树(AST),在AST基础上进行类型推断分析,支持修改AST从而生成新的Java文件内容(解析、修改和生成 Java 代码)。官网:https://javaparser.org
通过使用JavaParser,你可以执行以下任务:
- 分析Java源代码并获取详细信息。
- 修改现有的Java代码,并生成新的Java源代码。
- 自动化代码转换和重构任务。
- 构建静态代码分析工具。
JavaParser的特点
- 基于ANTLR 4的高性能解析器。ANTLR 4是一个流行的词法分析器和语法分析器生成器,用于构建语言、工具和服务。
- 完全符合Java语法规则。JavaParser遵循最新的Java语言规范,支持Java 8至17的所有版本。
- 简洁易用的API。JavaParser提供了清晰、直观的API,使您可以轻松地在Java代码上工作。
- 广泛的生态系统。JavaParser与其他流行的技术(如Junit、Mockito和Checkstyle)兼容,拥有丰富的生态系统。
- 开源免费。JavaParser是根据Apache 2.0许可证发布的,可以自由使用和扩展。
