zero's Blog

持续迭代

一、消息丢失的原因有哪些

1、消息生产阶段

  • 生产者配置错误:生产者在发送消息时,配置错误的主体、分区或者消息的过期时间,造成消息无法正确发送到MQ中。
  • 网络故障:生产者与MQ集群之间网络故障。

2、消息存储阶段

  • 磁盘故障:以Kafka举例,如果磁盘出现故障,Kafka中的消息无法落盘,可能导致消息的丢失。
  • 同步策略:消息未同步到follow节点,leader节点就挂了。

3、消息消费阶段

  • 消费者处理失败:在处理消费逻辑时,由于程序bug等原因,造成系统异常,错误应答从而丢失消息。
  • 消费者提交偏移量错误:当消费者消费完消息之后,提交错误的偏移量造成消息的重复消费或者消息丢失。
Read more »

[toc]

高可用架构演进背景

​ 在分布式系统中不可避免的会遇到网络故障,机器宕机,磁盘损坏等问题,为了向用户不中断且正确的提供服务,要求系统有一定的冗余与容错能力。RocketMQ 在日志,统计分析,在线交易,金融交易等丰富的生产场景中发挥着至关重要的作用,而不同环境对基础设施的成本与可靠性提出了不同的诉求。

​ 在 RocketMQ v4 版本中有两种主流高可用设计,分别是 主备模式的无切换架构 和 基于 Raft 的多副本架构(图中左侧和右侧所示)。

​ 生产实践中我们发现,两副本的冷备模式下备节点资源利用率低,主宕机时特殊类型消息存在可用性问题;而 Raft 高度串行化,基于多数派的确认机制在扩展只读副本时不够灵活,无法很好的支持两机房对等部署,异地多中心等复杂场景。RocketMQ v5 版本融合了上述方案的优势,提出 DLedger Controller 作为管控节点(中间部分所示),将选举逻辑插件化并优化了数据复制的实现。

在这里插入图片描述

Read more »

[toc]

什么是泛化调用

通常我们想调用别人的dubbo服务时,我们需要在项目中引入对应的jar包。而泛化调用的作用是,我们无需依赖相关jar包,也能调用到该服务。这个特性一般使用在网关类项目中,在业务开发中基本不会使用。

Read more »

[toc]

一、AIGC是什么?

AIGC是一种新的人工智能技术,它的全称是Artificial Intelligence Generative Content,即人工智能生成内容。

AIGC技术的核心思想是利用人工智能算法生成具有一定创意和质量的内容。通过训练模型和大量数据的学习,AIGC可以根据输入的条件或指导,生成与之相关的内容。例如,通过输入关键词、描述或样本,AIGC可以生成与之相匹配的文章、图像、音频等。

二、AIGC的4个主要特征

现阶段国内AIGC多以单模型应用的形式出现,主要分为文本生成、图像生成、视频生成、音频生成,其中文本生成成为其他内容生成的基础。

img

Read more »

转载自: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.自定义版本号标记注解

实用:优雅设计接口版本号

Read more »

转载自:https://blog.csdn.net/luanlouis/article/details/51155821

  

1、Spring内部创建代理对象的过程

  在Spring的底层,如果配置了AOP,Spring会为每一个Bean创建一个对应的ProxyFactoryBean的FactoryBean来创建某个对象的代理对象。
  假定有一个接口TicketService及其实现类RailwayStation,打算创建一个代理类,在执行TicketService的方法时的各个阶段,插入对应的业务代码。

1
2
3
4
5
6
7
8
9
10
public interface TicketService {
//售票
public void sellTicket();

//问询
public void inquire();

//退票
public void withdraw();
}
Read more »

转载自: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 自动配置去除了。

Read more »

起因:
对代码进行重构,把解析token的方法从Controller迁移到自定义的参数解析器中,实现代码复用。

问题:
按照正常流程搭建自定义参数解析器,发现最终请求未进入该自定义参数解析器。

Controller

1
2
3
4
5
6
7
8
9
10
@PostMapping
@NeedDistinct
public Result<Void> livenessDetect(@RequestHeader Map<String, String> headers, @RequestBody LivenessParam livenessParam) {
//重构前的token解析方法
//Long uid = userService.getUidByToken(getToken(headers));
if (uid == null){
throw new UserNotExistException();
}
//todo 代码逻辑
}
Read more »

  AOP(Aspect-Oriented Programming)面向切面的编程,在平时的开发过程中,AOP其实用到的地方一般有:

①用来做日记的处理
②方法的调用统计
③业务层面的读写分离(例如自定义的Annotation+AOP可以实现切换数据源)
④自定义权限拦截器

  在Spring框架中,AOP则发挥了不少功效,例如spring的事务。
  AOP具体的介绍移步:https://blog.csdn.net/zero__007/article/details/46765191

Read more »

[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许可证发布的,可以自由使用和扩展。
Read more »
0%