消息发送失败处理与 DLQ 补偿流程

消息发送失败处理与 DLQ 补偿流程

来自javaup中的点评plus项目,链接

当优惠券信息更改了, 使用消息发送到 Kafka 来通知消费者清除缓存,包括自己的本地缓存和 Redis 缓存,但是如果发送 Kafka 失败了呢?

流程图1

流程图2:

Mermaid 复制代码
flowchart TD
    A[业务调用 sendRecord 发送缓存失效消息] --> B[Kafka Producer 发送消息]
    
    B -->|发送成功| C[afterSendSuccess]
    C --> C1[记录成功指标]
    C1 --> C2{是否是 DLQ 重放消息?}
    C2 -->|是| C3[记录 DLQ 重放成功]
    C2 -->|否| C4[流程结束]
    
    B -->|发送失败| D[afterSendFailure]
    D --> D1[记录错误日志]
    D1 --> D2{当前 topic 是否为 DLQ?}
    D2 -->|是| D3[记录 DLQ 失败指标]
    D3 --> D4[结束]
    
    D2 -->|否| E[记录普通发送失败指标]
    E --> F[读取 headers.retryCount]
    F --> G{retryCount < 最大重试次数?}
    
    G -->|是| H[计算指数退避时间 backoff]
    H --> I[retryCount + 1]
    I --> J[写入 lastError]
    J --> K[sleepQuietly 退避等待]
    K --> L[重新 sendRecord]
    L --> B
    
    G -->|否| M[构建 DLQ 原因]
    M --> N[sendToDlq]
    N -->|成功| O[记录 DLQ 成功指标]
    O --> P[审计日志 AUDIT]
    P --> Q[结束]
    
    N -->|失败| R[记录 DLQ 失败指标]
    R --> S[人工介入]
相关推荐
Cc.Y5 小时前
Java零基础入门:类与对象深度掌握 —— 从“零散变量“到“打包管理“
java·开发语言·python
\光辉岁月/5 小时前
2.java变量
java·开发语言·变量
Wang's Blog5 小时前
Java 项目实战: 外卖平台优化-前端dist部署与Nginx反向代理rewrite
java·前端·nginx
专业程序开发源5 小时前
springboot生命故事书制作小程序65290-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·mysql·小程序·课程设计
代码山河6 小时前
Java的前世今生:从Oak语言到Java 23的发展史
java·学习·架构·教程·面向对象·项目
vx_Biye_Design6 小时前
springboot角色扮演服务平台65161-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·spring·课程设计
李游Leo6 小时前
HarmonyOS 7 QuickDock 闪控窗开发实录 02:floatView × floatingBall:形态切换、位置恢复与单一状态源【鸿蒙心迹】
java·华为·harmonyos
企业数字化笔记6 小时前
视频局部合成怎么做得自然?掩膜修复、边缘羽化、时序稳定与背景替换
java·javascript·音视频
仍然.6 小时前
Redis---主从复制
java·数据库·redis
vx_Biye_Design6 小时前
springboot咖啡厅顾客点单管理系统12080-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·课程设计·express