首页 > 其他分享 >一种通用的业务监控触发方案设计

一种通用的业务监控触发方案设计

时间:2023-05-16 10:47:13浏览次数:28  
标签:方案设计 触发 代码 业务 发送 消息 监控

一、背景

业务监控是指通过技术手段监控业务代码执行的最终结果或者状态是否符合预期,实现业务监控主要分成两步:一、在业务系统中选择节点发送消息触发业务监控;二、系统在接收到mq消息或者定时任务调度时,根据消息中或者任务中的业务数据查询业务执行的结果或状态并与业务预期的结果相对比。目前供销系统的方案如下:

由业务系统发送消息触发规则中心的校验任务,校验逻辑和报警规则通过规则中心的groovy脚本代码实现,该方案的缺点如下:
1.业务监控代码掺杂在正常的业务代码中,业务监控的代码侵入性高;
2.业务监控消息触发代码可复用性极低,各个应用都要维护一套代码,后期若要增加或维护某个功能时成本大;
3.增加业务监控的开发工作量,开发人员需要开发和维护与业务监控功能无关的代码,如:消息触发降级功能、性能监控、异步触发等功能;
为解决上述问题,本文提出了一种通用的业务监控触发方案。

二、方案介绍

  1. 通用mq消息体:
public class BusinessCheckMessage {
    /**
     * 监控类型
     */
    private String businessType;
    /**
     * 业务监控需要的参数
     */
    private Object data;
    /**
     * 业务方
     */
    private String businessSource;
    /**
     * 当前所属的topic
     */
    private String topic;
}

其中,
businessType用于区分业务监控的类型,如:终止合作、提单等;
data用于存储和业务相关的关键数据,如订单id、商家id等;
businessSource用于区分不同业务方的业务,如:万商的提单、供销的提单等;
topic用于隔离消息,如:业务监控任务执行快的可以用主题A、执行慢的的可以用主题B等;

2.自定义注解 + 切面
以供销系统业务监控为例,接近50%的场景是将方法体中的参数作为业务数据来触发业务监控,针对此场景,本文采用注解+切面解耦业务监控代码和正常业务代码,降低业务监控代码对正常的业务代码的侵入,其中自定义注解负责获取业务监控需要用到的方法入参中的相关数据,切面负责组装通用mq数据模型并完成消息的发送。自定义注解定义如下:

public @interface BusinessCheckPoint {
    /**     
     * 业务监控类型     
     */    
   String businessType();    
   /**     
    * 业务方     
    */    
   String businessSource();    
   /**     
    * 要发送的消息的topic     
    */    
   String businessTopic();    
   /**     
    * 方法参数的第几个参数作为消息内容,从0开始     
   */    
   int dataIndex();    
   /**     
    * 在执行业务流程前发送消息     
    * 默认在业务流程执行后发送消息     
    */    
   boolean beforeOperate() default false;
}

其中,
businesstype用于获取业务监控类型;
businessSource用于获取业务方;
businessTopic用于获取当前要发送的消息主体;
dataIndex用于获取方法体参数中的数据,从0开始;
beforeOperate用于获取消息发送的时间,在业务流程执行后发送消息还是业务流程执行前发消息;

3.侵入式触发业务监控
考虑到业务系统可能会在复杂场景下触发业务监控,本文也提供了通用的解决方案,具体如何使用见下一章节的实战介绍。

三、实战介绍

1.引入依赖

<dependency>    
    <groupId>com.jd</groupId>    
    <artifactId>business.check</artifactId>   
    <version>1.0.0</version>
</dependency>

2.初始化切面

<bean id="businessCheckAspect" class="com.jd.gmall.monitor.aspect.BusinessCheckAspect"/>

3.Producer及线程池赋值

<bean id="businessCheckHandler" class="com.jd.gmall.monitor.service.impl.BusinessCheckHandlerImpl">    
    <property name="messageProducerMap">        
        <map>            
            <entry key="gx_bussiness_check" value-ref="businessCheckProducer" />        
        </map>    
    </property>    
    <property name="commonExecutor" ref="asyncTaskThreadPoolTaskExecutor"/>
</bean>

其中,
messageProducerMap类型为Map<String, Producer>,用于指定topic对应的Producer;
commonExecutor用于指定异步发送消息时用到的线程池(建议自行创建线程池);

4.业务监控消息发送
场景一:
简单场景下可使用自定义注解来发送消息,如下所示

业务监控类型 = "100"
消息主题 = "gx_bussiness_check"
业务方 = "ws"
消息体中的业务数据data = req

场景二:
复杂场景下,可在服务中注入sdk中的消息发送服务,如下所示

场景二与场景一发送的消息内容一致。

5.业务监控降级不发送消息
sdk中的类BusinessCheckHandlerImpl中定义了控制降级的方法:

public static void setBusinessCheckSwitch(boolean businessCheckSwitch) {            
    BusinessCheckHandlerImpl.businessCheckSwitch = businessCheckSwitch;
}

此处给出了通过ducc控制降级的方法:

@LafValue("business.check.switch")
public void setBusinessCheckSwitch(boolean switch) {   
  BusinessCheckHandlerImpl.setBusinessCheckSwitch(b);
}

switch:true,开启消息发送;false,降级

作者:京东零售 胡飞

内容来源:京东云开发者社区

标签:方案设计,触发,代码,业务,发送,消息,监控
From: https://www.cnblogs.com/jingdongkeji/p/17404165.html

相关文章

  • prometheus 监控 exsi vcenter,kvm libvirt
    转自:https://www.scriptjc.com/article/1284 prometheus监控exsivcenter,kvmlibvirt来源:原创时间:2021-10-20作者:脚本小站分类:Linux监控vcenter:github地址:1https://github.com/pryorda/vmware_exporter启动:1234567#!/bin/bash ......
  • tensorrt yolov5 QT 智能监控平台。 yolov5使用 tens
    tensorrtyolov5QT智能监控平台。yolov5使用tensorrt推理封装成dll,支持多线程多任务,可同时并行加载不同模型,同时检测。Qt开发的监控平台,支持不同平台部署,视频监控,录像回放,电子地图,日志和系统设置应有尽有。视觉监控,同时加载16路视频,同时并行检测任务,可网络流可本地视频。ID:316......
  • 机房空调数据采集监控解决方案
    行业背景随着企业数字化和信息化水平的不断提高,许多企业都建立了独立的计算机机房,承担越来越重要的作用。然而机房设备受到周围环境的影响是巨大的,一旦机房环境出现异常,往往会影响到机房设备的运行、数据的传输存储等,甚至导致电气火灾与经济损失,因此,对机房环境进行实时数据采集与监......
  • elk日志收集之rsyslog软连接监控文件深度坑
    业务中通过rsyslog监控本地文件收集了一些redis和mc的慢日志,推到elk集群分析,这些日志一天一个文件,每晚零点5分通过计划任务用软连接的方式将新的文件固定到指定文件下,但是最近发现日志丢了很多,分析中发现了一个深坑,先说下现有的配置:rsyslog的配置如下,监控固定的文件:local6.*......
  • SAP采购订单修改后再次审批触发EDI输出问题
    问题:采购PO设置任何修改时需要进行再次审批,再次审批时会触发一个EDI错误消息输出.现象:使用ME21N创建PO并使用ME29N审批.我们会看到一个正确(绿色)的消息输出.当我们使用ME29N修改了PO数量为2,保存以后,再次审批.我们会看得红色的错误输出.查看日志如下:问题解决方案:......
  • 安科瑞电力监控自动化系统的实践应用
    安科瑞虞佳豪智能建筑电力监控自动化实践运用1.常规电力监控系统的运用常规监控是指,为了能够有效地对电力系统中的各个节点的电流电压、功率电能、运行状态等进行数据检测,参数统计和分析,并能够实现预警和自动控制,在电力系统中建立的一种监控手段。下面就某高校的电力控制系统进......
  • 工厂智能电表远程抄表系统项目,成功案例,源代码出售,C#语言,可监控24小时厂区总用电量波形
    工厂智能电表远程抄表系统项目,成功案例,源代码出售,C#语言,可监控24小时厂区总用电量波形图,单表24小时用电量波形图。可自动导出多种不同形式excel表,厂区单月各表用电量,厂区各表电量值,单表每日用电量表,单表每小时用电量表ID:3477654308305764......
  • MySQL 存储过程&触发器&事务
    存储过程概念存储过程(StoredProcedure),是为了完成特定功能的SQL语句集。优点存储过程可以理解为shell脚本这类型的命令集输出工具,但是在底层,存储过程拥有更多的优点:语言的灵活性跟功能性更强,在原有基础之上可以插入控制语句、循环语句等让SQL语句的功能更强,能够完成更复杂的......
  • C#上位机 APP监控西门子PLC S7-1200 1,C#开发上位机手机A
    C#上位机APP监控西门子PLCS7-12001,C#开发上位机手机APP,自己写的程序可提供部分2,通过VS2019开发安卓手机app3,全套源代码,现场运行设备实测有效。4,完整项目代码,拿来就可实际应用5,项目完整架构,本项目是针对起重机高空不易维护问题开发的6,功能完善,数据库,语音报警,数据报表都有。用户......
  • labview源码,当时在企业实习给企业做的视频监控系统,通 过迅雷Aplayer播放器进行视频图
    labview源码,当时在企业实习给企业做的视频监控系统,通过迅雷Aplayer播放器进行视频图像监控。能实现截图,全屏播放,暂停等功能硬件:大华摄像头软件:labview通讯方式:Rtsp数据流视频演示链接:https://pan.baidu.com/s/18eBW1_CEeUaO_0-DxWtcew?提取码:013cID:3188612567997565......