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