自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

原创 Spring AI MCP限流、鉴权、重试方案

java运行// 1. IP 维度限流@Bean// 2. 客户端 ID 维度限流(客户端请求头传递 X-MCP-Client-Id)@Bean// 3. 工具级限流(客户端请求头传递 X-MCP-Tool-Name)@Beanjava运行@Bean// 配置 SSE 连接重试.filter(ex -> ex instanceof Exception) // 仅重试网络异常.build();

2025-11-24 11:36:07 136

原创 链路追踪原理-SpanContext

Zipkin 底层通过 “追踪代理生成数据 → 协议注入传递上下文 → 本地缓冲批量上报 → 服务器存储与聚合 → UI 可视化展示” 的流程,实现分布式链路的追踪。核心依赖 Brave 库的自动拦截、B3 协议的跨服务传递、以及可扩展的存储引擎,最终为开发者提供跨服务问题排查和性能分析的能力。在 RPC 调用(如 Dubbo、gRPC 等)中,traceId通过 RPC 协议的 “附加元数据” 机制,将(包含traceIdspanId等)从服务 1 传递到服务 2。

2025-11-24 09:14:50 845

原创 大模型返回超出截断解决方案

方案核心优势开发成本适用场景1. 基础压缩简单高效,无需复杂逻辑低JSON 接近 Token 限制,无大文本2. 字段缩写压缩Token 压缩比高中结构化数据,字段名较长3. Base64 编码适合大文本 / 大数组低JSON 包含大量长文本、重复字段4. 循环轻量进度通用稳定,输入不超 Token中所有大 JSON 场景(核心推荐)5. 循环增量锚点续传更准,无重复遗漏中长列表数据(100 + 元素)6. 大模型 / 配额极简落地,无需开发极低。

2025-11-21 18:14:34 8

原创 代码仓库自动发布流水线

这套方案的核心是「彻底解耦」—— 通过「业务代码与部署逻辑分离、配置与执行分离、敏感信息与公开代码分离」,实现了真正的跨仓库、跨工具、跨环境通用。无论你当前用的是 GitLab、GitHub 还是 Gitee,后续切换任何平台,都无需修改一行业务代码,仅需在新的 CI/CD 平台配置「拉取外置脚本 + 引用凭据」,即可快速复用整个部署流程,真正做到「一次配置,终身复用」。

2025-11-21 09:58:27 146

原创 Redis 集群宕机不停机解决方案

Redis 集群挂了的解决方案,围绕「故障兜底→快速恢复→压力分流→长效保障」展开,整合你的思路形成可落地的 5 大核心策略,兼顾可用性与安全性。

2025-11-21 08:47:02 187

原创 Dockerfile 到推送 Docker Hub

Dockerfile 是构建镜像的 “配方”:没有 Dockerfile,你可能是通过其他方式(如)创建镜像,但生产环境更推荐用 Dockerfile 构建(可重复、可追溯)。推送的是 “构建好的镜像”:Dockerfile 本身不需要推送到 Docker Hub,只需推送它构建出的镜像。

2025-11-20 11:13:49 74

原创 俩种状态机文件

描述了一个基于 Saga 模式的转账流程(

2025-11-20 11:13:23 516

原创 springboot+h2

/ 若需持久化到文件:url("jdbc:h2:file:./data/testdb;// 控制台访问路径:http://localhost:8082/h2-console(端口默认与应用一致,可自定义).driverClassName(Driver.class.getName()) // H2 驱动。"-webPort", "8082", // 自定义控制台端口(默认与应用端口相同,如 8080)// 控制台访问路径。

2025-11-20 11:11:11 371

原创 rocketMq consumeQueue和CommitLog和index File

CommitLog是 “物理存储”,存所有消息的完整数据,保证可靠性和写入性能。是 “逻辑索引”,按 Topic+Queue 分区,存消息在CommitLog中的位置信息,提升消息检索效率。二者分工协作,既保证了海量消息的高效写入,又支持了按主题、队列的快速查询,是 RocketMQ 高吞吐、高可用的核心设计之一。index file又是啥在 RocketMQ 中,Index File(索引文件)是用于加速消息按“消息键(Key)” 或 “唯一消息 ID”查询的辅助索引结构,与CommitLog和。

2025-11-17 11:12:44 1004

原创 超详细的 K8s 高频面试题,绝对实用篇

例如,当有新的Deployment被创建时,Controller Manager会收到API Server的通知,并相应地创建新的Pod。通过配置Liveness Probe,Kubernetes可以定期检查容器的存活状态,并在检测到容器不存活时采取相应的操作,例如重新启动容器,以确保应用程序的可用性。kubelet通过与API Server建立HTTP或HTTPS连接,定期向API Server报告节点状态、获取Pod的调度信息,并接收来自API Server的指令,如创建、更新、删除Pod等。

2025-11-17 11:11:53 392

原创 部署Springboot项目到K8S流程

将 Spring Boot 项目部署到 Kubernetes(K8s)需要经过三个核心步骤。

2025-11-05 11:30:01 416

原创 K8S跨机房部署流程

以下是的完整详细步骤,包含网络准备、集群初始化、组件配置、应用部署等全流程,确保可落地执行。

2025-11-05 11:27:11 603

原创 Sidecar

SOFA 的 “SDK 式 Sidecar” 本质是“将 Sidecar 能力嵌入业务进程”,通过 SDK 实现流量劫持和服务治理,再打包成单一镜像部署到 K8s。这种模式适合同语言(如 Java)微服务集群,兼顾性能和部署简便性。如果你要自研,核心是做好无侵入拦截服务发现集成和动态配置管理,并与 K8s 的服务发现机制(如 Endpoints、Service)协同工作。如果需要具体的 SDK 模块设计(如拦截器实现、K8s 客户端集成),可以进一步说明,我会补充代码示例。

2025-10-24 16:47:24 592

原创 Java使用selenium爬取b站动态的实现方式

Java使用selenium爬取b站动态的实现方式_java_脚本之家

2025-10-24 16:47:11 104

原创 Lora微调

创建。

2025-10-24 16:46:59 241

原创 Prometheus 指标监控

全面覆盖:支持从底层基础设施(服务器、容器、网络)到上层应用(接口、数据库、缓存)的全链路指标监控;多维度分析:通过标签实现精细化筛选,比如按 “地区、集群、应用、实例” 拆分指标;实时性强:拉取周期可配置(秒级),能快速捕捉系统状态变化;可扩展性高:支持自定义指标(比如在应用中嵌入 Prometheus 客户端,上报业务指标如 “订单支付成功数”),适配复杂业务场景。用可量化的数据,把系统 “看不见的状态” 变成 “看得见的图表”,把 “事后排查” 变成 “事前告警”。

2025-10-24 16:46:41 1012

原创 Java Agent 实现 “植入监控”

在启动一个 JAR 包时 “植入” 另一个 JAR 来监控其内部请求(如 HTTP 调用、方法调用等),本质上是通过或实现的动态监控。这种方式无需修改原 JAR 包的代码,即可在运行时拦截请求并收集信息(类似 AOP,但作用于整个 JVM 进程)。

2025-10-24 16:46:29 427

原创 sofa 双活多Zone心得

让每个 Zone 的实例通过独立配置或动态注入,明确自身所属的 Zone 信息,无需在单份配置中罗列所有 Zone。服务发布会自动跟随实例所在的 Zone(或受 DRM 配置限制),实现多 Zone 部署下的服务管理。我如果一个服务部署到AZONE下和BZONE下怎么配置当一个服务需要同时部署到AZONE和BZONE两个 Zone 时,核心是让两个 Zone 的服务实例分别感知自身所属的 Zone 信息,通过差异化配置核心是让AZONE和BZONE的实例通过动态注入或差异化配置,分别声明自身所属的。

2025-10-22 16:02:46 898

原创 执行KILL PID执行钩子方法ShutdownHook

要触发,核心是让进程优雅退出优先使用kill <PID>(或)发送SIGTERM信号;或在代码中主动调用(如通过接口触发)。避免使用kill -9SIGKILL),它会直接终止进程,无法触发任何收尾逻辑。kill <PID>(默认发送SIGTERM信号)会触发 JVM 执行所有已注册的(关闭钩子)方法,直到所有钩子执行完成(或超时)后,进程才会退出。

2025-10-11 17:38:33 334

原创 AT模式下跨库解决方案--全局锁挑战问题

对于orderId=1order_db_0)和orderId=2order_db_1全局锁:TC 分别为两条记录加锁(和),独立控制,互不干扰;undo_log与回滚:两个库的undo_log分别记录镜像,回滚时各自生成补偿 SQL 执行;一致性保障:TC 确保所有分片都提交或都回滚,RM 确保本地操作的正确性,最终实现跨分片事务的一致性。简单说,Seata 通过 “分库操作本地化,全局协调中心化” 的设计,让跨分片事务像 “多个单库事务被同一xid。

2025-10-11 17:15:40 1042

原创 确保分布式事务的回滚 / 补偿机制能正常生效,不被本地事务破坏。

当一个事务使用(分布式事务),另一个使用(本地事务)操作同一批数据时,核心问题是(例如本地事务修改了分布式事务未提交的数据,导致分布式事务回滚失败)。解决的核心思路是。

2025-10-09 16:15:44 779

原创 seata AT、XA、TCC

是 TCC 模式中连接Try阶段与ConfirmCancel阶段的关键注解,通过将参数存入全局上下文,确保分布式环境下补偿逻辑能正确获取所需数据,是实现可靠 TCC 事务的核心机制之一。

2025-10-09 15:16:53 644

原创 seata底层源码是如何实现的-saga 篇

长事务指执行时间长(分钟、小时甚至天级)、涉及多个跨系统步骤电商的「订单 - 支付 - 发货 - 签收 - 结算」全流程(可能持续数天)。供应链的「采购申请 - 审批 - 供应商发货 - 入库 - 付款」流程(可能持续数周)。金融的「贷款申请 - 征信 - 审批 - 签约 - 放款」流程(可能持续数天)。步骤多且分散在多个独立系统(如订单系统、物流系统、财务系统)。步骤间可能存在人工干预(如审批、签收),导致整体耗时极长。无法接受资源长期锁定(如订单未支付时,库存不能被锁几天)。

2025-10-09 09:19:35 1008

原创 seata底层源码是如何实现的-AT 篇

Prepare 阶段:拦截 SQL 执行,解析生成 undo_log,注册分支事务并申请全局锁。Commit 阶段:删除 undo_log,释放全局锁。Rollback 阶段:基于 undo_log 生成反向 SQL 执行回滚,清理日志并释放锁。核心依赖数据源代理SQL 解析和全局锁三大技术,实现无侵入式的分布式事务一致性保障。

2025-10-09 09:19:10 709

原创 seata底层源码是如何实现的-2PC 篇

java运行/*** 2PC 参与者接口(每个微服务或数据库节点实现此接口)*/// 参与者唯一标识(如服务名+节点ID)/*** Prepare 阶段:执行本地事务但不提交* @param globalTxId 全局事务ID* @return 是否准备就绪(本地事务执行成功)*//*** Commit 阶段:提交本地事务*//*** Rollback 阶段:回滚本地事务*/协调者发起全局事务,生成 GID 并管理参与者。

2025-10-09 09:17:02 584

原创 seata底层源码是如何实现的-TCC 篇

资源注册:扫描注解,注册方法映射。分支注册Try执行时向 TC 注册分支事务,获取branchId。全局协调:TC 汇总Try结果,决定执行Confirm或Cancel。幂等与防悬挂:通过fence_log表确保正确执行,避免异常场景下的数据不一致。这种设计要求业务层手动实现接口,但灵活性高,适合核心业务场景(如支付、库存扣减)。

2025-09-30 09:46:16 770

原创 springBoot 发送报文压缩/解压

若需仅对特定 Controller / 接口启用压缩(如仅/api/**路径,排除文件下载接口),可通过 Spring 拦截器实现,灵活控制压缩范围。java运行/*** 自定义 Gzip 响应压缩拦截器*/// 拦截前:包装响应流,后续 Controller 输出的内容会先存入字节流@Override// 1. 判断客户端是否支持压缩(请求头携带 Accept-Encoding: gzip)// 2. 包装响应流为 Gzip 流,替换默认输出流// 告知客户端响应已压缩。

2025-09-30 09:00:59 1090

原创 RESTEasy

创建一个简单的用户资源类,处理用户相关的 HTTP 请求:java运行// 资源路径:/users@Produces(MediaType.APPLICATION_JSON) // 默认返回 JSON@Consumes(MediaType.APPLICATION_JSON) // 接收 JSON 请求体// 模拟数据库存储用户// GET /users:查询所有用户@GET// GET /users/{id}:查询单个用户@GET。

2025-09-30 09:00:45 845

原创 动态修改springboot日志级别 logback

通过 Logback 提供的和Logger类,在代码中动态修改级别,适合需要根据业务逻辑自动调整的场景。快速临时调整:优先用 Actuator 的loggers端点,简单高效,适合运维操作;业务联动调整:用编程式 API,结合业务逻辑动态修改(如根据系统负载调整日志详细程度);持久化需求:结合配置中心,确保重启后级别不丢失。两种方案均基于 Logback 原生能力,无需修改 Logback 配置文件,实现真正的 “动态” 调整。

2025-09-30 08:59:47 523

原创 java实现队列满了就等待功能

即使在单线程中,也可以用。

2025-09-30 08:59:24 334

原创 java 如何从http1升级到2升级到3

更换为 OkHttp 或配置 HttpClient 5.x,利用 ALPN 协商协议,无需修改业务逻辑,性能提升显著(尤其多请求场景)。:使用 OkHttp 5.x 实验性支持或 Netty,依赖服务器 QUIC 配置,适合弱网络或低延迟需求,目前生态尚在完善中。根据业务需求选择升级路径:优先升级到 HTTP/2(兼容性和性能平衡),待 HTTP/3 普及后再考虑进一步升级。注意:******Springboot如何将controller升级成http2。

2025-09-29 14:47:50 1082

原创 在 Java 中调用 API 时,针对 HTTP/1.1、HTTP/2、HTTP/3 三种协议

在 Java 中调用 API 时,针对 HTTP/1.1、HTTP/2、HTTP/3 三种协议,可选择不同的客户端库实现。

2025-09-29 14:38:39 833

原创 Netty实现双向通信-单向通信

Netty 中实现单向通信的核心是业务层限制数据流向:仅一方发送数据,另一方仅接收(不回复业务数据)。借助 Netty 的异步 IO 和编解码框架,可高效实现高并发的单向数据传输,同时需注意连接维护和资源控制。

2025-09-29 11:33:45 708

原创 分页查询 —— 二次查询法

----------------------------------分割线-------------------------------------------------------------------------------分割线--------------------------------------------结果为: [5,7,9,11,13] 和 [6,8,10,12,14] (结果一样是因为例子中表数据规则)结果 [5,7,9,11,13] 和 [6,8,10,12,14]

2025-09-29 10:57:22 723

原创 Spring Boot 应用中,“探针”

Spring Boot 探针的核心是通过 Actuator 提供的健康检查端点,结合容器平台(如 K8s)实现应用的自动运维。通过自定义健康检查逻辑,可灵活适配业务场景,确保应用可靠运行。

2025-09-29 09:54:51 198

空空如也

空空如也

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

TA关注的人

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