算法mq 交互通用校验模块设计

背景

当前与算法交互均通过rocketMQ异步交互,绝大部分场景一条请求mq消息应对应一条返回mq,但由于各种原因(消息积压、程序bug),可能会导致返回mq超时未返回或者消息丢失。工程侧针对一些重要场景 case by case的通过定时任务不断检查返回mq的状态,并在一定时间后手动触发告警提醒返回mq出现问题。该方案也能够一定程度的解决问题,但存在一些弊端:

  • 需要case by case的开发,开发成本高
  • 容易遗漏
  • 手动触发告警容易导致告警过多,产生疲劳,真正的问题被隐藏在大量的告警中。
    因此这里介绍一种通用方案,预期能够解决以上问题。

现有方案

在这里插入图片描述

主要问题

  • 如何唯一标识请求mq对应的返回mq
    • 目前的方案是根据场景的不同,选择不同的业务字段,如resourceId
    • 方案一:统一约定公共字段,如bizMsgId,所有与算法交互请求和返回mq均带有该字段
      • 优点:能够实现唯一标识的目标
      • 缺点:工程、XX、算法均需要改造,成本较高
    • 方案二(推荐):通过traceId串联请求和返回mq,即返回mq将请求mq带下去的traceId带回来。
      • 优点:
        • 有很多现成的框架可以集成,对java工程来说开发成本低
        • 集成了traceId之后无论是工程还是算法都可以用来做全链路追踪,方面问题的排查。
      • 待确认点
        • 算法rocketMq以何种方式向下传递 traceId
  • 如何进行状态检查
    • 后端维护一张通用的任务表,在发送请求mq和收到算法返回mq时进行拦截,发送时向表中增加一条数据,更新状态为已发送,待返回。
    • 收到算法返回mq时更新对应行的状态
    • 定时任务,捞取30分钟(待定)前未返回的消息详情,并埋点
  • 告警如何触发
    • 通过SLS配置定时检查任务,按照告警规则配置进行告警分组(解决同一类型告警重复报多次的问题)、告警分级(解决大量告警淹没重要告警的问题)通知告警处理人
      • 一分钟内,<5条 飞书群提醒
      • 5条 短信提醒

      • 10条 短信、电话提醒

  • 告警升级策略
    • 10分钟不认领,短信、电话提醒TL
    • 30分钟未处理升级。
  • 算法 纳入全链路监控

技术方案

在这里插入图片描述

数据模型

在这里插入图片描述

其他

  • 有些场景是通过dubbo发起请求,通过mq返回结果,需要梳理场景
  • 有些场景是发送请求给搜推mq,但返回mq是由算法发送,待梳理

参考

  • rocketmq发送、接收拦截器
    • 生产者发送拦截
public class TraceProducerInterceptor implements ProducerInterceptor {private static final String TRACE_ID = "traceId";private static final String SPAN_ID = "spanId";@Overridepublic Message<?> beforeConvert(Message<?> message) {String traceId = TraceContext.getTraceId();String spanId = TraceContext.getSpanId();if (traceId != null && spanId != null) {MessageHeaders headers = message.getHeaders();headers.put(TRACE_ID, traceId);headers.put(SPAN_ID, spanId);if (message instanceof ErrorMessage) {ErrorMessage errorMessage = (ErrorMessage) message;Message<?> originalMessage = errorMessage.getOriginalMessage();if (originalMessage != null) {originalMessage = beforeConvert(originalMessage);errorMessage = new ErrorMessage(errorMessage.getPayload(), originalMessage, errorMessage.getHeaders(), errorMessage.getCause());}return errorMessage;}}return message;}
}
  • 消费者消费拦截
public class TraceConsumerInterceptor implements ConsumerInterceptor {private static final String TRACE_ID = "traceId";private static final String SPAN_ID = "spanId";@Overridepublic void afterReceive(Message<?> message) {String traceId = message.getHeaders().get(TRACE_ID, String.class);String spanId = message.getHeaders().get(SPAN_ID, String.class);if (traceId != null && spanId != null) {MDC.put(TRACE_ID, traceId);MDC.put(SPAN_ID, spanId);}}
}
  • 配置拦截器
rocketmq:producer:interceptor:- com.example.TraceProducerInterceptorconsumer:interceptor:- com.example.TraceConsumerInterceptor
  • rocketmq集成opentelemetry trace
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/868128.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基础权限存储

一丶要求 建立用户组shengcan&#xff0c;其id为 2000建立用户组 caiwu&#xff0c;其id 为2001建立用户组 jishu&#xff0c;其id 为 2002建立目录/sc,此目录是 shengchan 部门的存储目录&#xff0c;只能被 shengchan 组的成员操作4.其他用户没有任何权限建立目录/cw,此目录…

GIT 使用相关技巧记录

目录 1、commit 用户信息变更 全局用户信息&#xff08;没有特殊配置的情况下默认直接用全局信息&#xff09; 特定仓库用户信息&#xff08;只针对于当前项目&#xff09; 方法一&#xff1a;修改config文件 方法二&#xff1a;命令方式 2、idea同一代码推向多个远端仓库…

Ubuntu编译 OSG

目录 一、安装步骤 二、配置 1、数据文件配置 2、OSG环境变量配置 一、安装步骤 在Ubuntu上安装OSG(OpenSceneGraph),你可以按照以下步骤操作: 打开终端,更新你的包管理器的包列表: sudo apt update 安装必要的依赖库 sudo apt install libglu1-mesa-dev freeglu…

Java -- 实现MD5加密/加盐

目录 1. 加密的引出2. MD5介绍3. 解决MD5不可解密方法4. 实现加密解密4.1 加密4.2 验证密码 1. 加密的引出 在MySQL数据库中&#xff0c;一般都需要把密码、身份证、电话号码等信息进行加密&#xff0c;以确保数据的安全性。如果使用明文来存储&#xff0c;当数据库被入侵的时…

第七篇——攻谋篇:兵法第一原则——兵力原则,以多胜少

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 微观层面上&#xff0c;也有很多值得深度思考的问题 二、思路&方案 …

CV- 人工智能-深度学习基础知识

一, 深度学习基础知识 1,什么是深度学习?机器学习是实现人工智能的一种途径,深度学习是机器学习的一个子集,也就是说深度学习是实现机器学习的一种方法。2, 传统机器学习算术依赖人工设计特征,并进行特征提取,而深度学习方法不需要人工,而是依赖算法自动提取特征。深度…

MuLan:模仿人类画家的多对象图像生成

在图像生成领域&#xff0c;处理包含多个对象及其空间关系、相对大小、重叠和属性绑定的复杂提示时&#xff0c;现有的文本到图像模型仍面临挑战&#xff1a;当文本提示中包含多个对象&#xff0c;并且这些对象之间存在特定的空间关系时&#xff0c;现有模型往往难以准确地捕捉…

嵌入式c语言4——类型修饰符

register&#xff0c;将变量保存在寄存器中&#xff0c;使得访问速度增加 const是常量&#xff0c;static是静态量&#xff0c;volatile是

从0-1实现一个前端脚手架

https://gitee.com/childe-jia/kfc-cli.git gitee完整地址 介绍 为什么需要脚手架&#xff1f; 脚手架本质就是一个工具&#xff0c;作用是能够让使用者专注于写代码&#xff0c;它可以让我们只用一个命令就生成一个已经配置好的项目&#xff0c;而不用我们再花时间去配置和安…

zabbix 与 grafana 对接

一.安装 grafana 1.初始化操作 初始化操作 systemctl disable --now firewalld setenforce 0 vim /etc/selinux/config SELINUXdisabled 2.上传数据包并安装 cd /opt grafana-enterprise-9.4.7-1.x86_64.rpm #上传软件包 yum localinstall -y grafana-enterprise-9.4.7-1…

Javascript常见数据结构和设计模式

在JavaScript中&#xff0c;常见的数据结构包括两大类&#xff1a;原始数据类型&#xff08;Primitive Types&#xff09;和对象类型&#xff08;Object Types&#xff09;。对象类型又可以进一步细分为多种内置对象、数组、函数等。下面是一些JavaScript中常见的数据结构&…

PyFluent入门之旅(4)算例求解

在网格划分完成或已有网格的情况下&#xff0c;可以进行算例的求解。 1. 切换/打开求解器 一般启动求解器前有两种情况&#xff1a; 已启动FluentMeshing并生成了网格&#xff0c;需要在不退出FluentMeshing的情况下直接切换至Fluent求解器。已经有现成的网格文件&#xff0…

检测到弱密码:并非所有密码套件均支持完全前向保密解决方案

问题 检测到弱密码&#xff1a;并非所有密码套件均支持完全前向保密&#xff08;弱密码套件 - ROBOT 攻击&#xff1a;服务器支持易受攻击的密码套件&#xff09; 背景介绍 HTTP 协议自身没有加密机制&#xff0c;但可以通过与 TLS (Transport Layer Security) / SSL (Secur…

【AI资讯】快手 可灵web端上线

可灵 AI – 新一代 AI 创意生产力平台 快手 可灵web端上线了&#xff0c;目前登录即可用&#xff0c;感兴趣可以试试。

90元搭建渗透/攻防利器盒子!【硬件篇】

前言 以下内容请自行思考后进行实践。 使用场景 在某些情况下开软件进行IP代理很麻烦&#xff0c;并不能实现真正全局&#xff0c;而且还老容易忘记&#xff0c;那么为了在实景工作中&#xff0c;防止蓝队猴子封IP&#xff0c;此文正现。 正文 先说一下实验效果&#xff1…

53-1 内网代理3 - Netsh端口转发(推荐)

靶场还是用上一篇文章搭建的靶场 :52-5 内网代理2 - LCX端口转发(不推荐使用LCX)-CSDN博客 一、Netsh 实现端口转发 Netsh是Windows自带的命令行脚本工具,可用于配置端口转发。在一个典型的场景中,如果我们位于公网无法直接访问内网的Web服务器,可以利用中间的跳板机通过…

【LeetCode】十三、分治法:多数元素 + 最大子序列和

文章目录 1、分治法2、leetcode169&#xff1a;多数元素3、leetcode53&#xff1a;最大子序和 1、分治法 分治一般都搭配递归使用&#xff1a; 用分治法的一个应用——归并排序&#xff1a;将一组数不停的一分为二&#xff0c;直到分到每组只有一个数的时候 分到每组只有一个数…

Python28-7.5 降维算法之t-分布邻域嵌入t-SNE

t-分布邻域嵌入&#xff08;t-distributed Stochastic Neighbor Embedding&#xff0c;t-SNE&#xff09;是一种用于数据降维和可视化的机器学习算法&#xff0c;尤其适用于高维数据的降维。t-SNE通过将高维数据嵌入到低维空间&#xff08;通常是二维或三维&#xff09;中&…

Edge浏览器油猴插件的安装与使用

油猴 (又称篡改猴或Tampermonkey) 是最流行的浏览器扩展之一。它允许用户自定义并增强网页的功能。用户脚本是小型 JavaScript 程序&#xff0c;可用于向网页添加新功能或修改现有功能。使用油猴&#xff0c;您可以轻松在任何网站上创建、管理和运行这些用户脚本。 1.插件的安…

【数据结构与算法】希尔排序

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法》 期待您的关注 ​