开启左侧

接口报错预警企微音讯

[复制链接]
在线会员 ECSGk4 发表于 2023-4-2 15:23:47 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
交心报错预警企微消息

择要
实时发明法式报错预警
枢纽词汇
企微收收帮忙消息交心、自界说诠释、aop、解耦
成就的提出
1- 立即反应用户端非常情况
2-增加 净数据的进库
处置思路和实践
关于 可以招致数据没有不合情况之处 代码中没有要catch或许 catch住要截至处置或许 扔出到controller层 正在分歧非常处置以前拦阻住非常 挪用企微收收消息交心背设置的职工收收企微消息

交心报错预警企微消息-1.jpg

设置文献中设置使用称呼、情况称呼
正在预警消息中收收非常发作的交心、恳求参数、毛病疑息、另有时间戳。能够按照时间戳定位到毛病发作职位(便利盘问日记)
使用
自界说一个starter starter中尽可以少依靠其余jar包
自界说了一个诠释关于 正在交心上增加此诠释的交心截至毛病预警
设置文献中可设置使用、情况、企业、对于应企业的职工、可否激活此诠释
使用时只要供增加starter依靠、设置您自己的设置文献 正在交心报错的时候便会正在企微中收给您预警消息 对于应的开辟职员能够立即发明立即处置
诠释
  1. /**
  2. * @Author ningYu
  3. * @create 2022/6/10 11:17
  4. * @Target 诠释用去指定一个诠释的使用范畴
  5. * @Retention 用于描绘诠释的性命周期,也即是该诠释被保存的时间是非
  6. * @Documented 诠释润饰的诠释类会被 JavaDoc 东西提炼成文档
  7. * @Inherited 是一个标识表记标帜诠释,用去指定该诠释能够被承袭
  8. */
  9. @Target(value = {ElementType.METHOD})
  10. @Retention(RetentionPolicy.RUNTIME)
  11. @Documented
  12. @Inherited
  13. @Order(Ordered.HIGHEST_PRECEDENCE)
  14. public @interface WarnNotice {
  15.     //办法名
  16.     String value() ;
  17.     //操纵范例
  18.     int operateType();
  19.     //功用范例
  20.     String functionType() ;
  21. }
复造代码
处置诠释代码`
  1. @Pointcut("@annotation(com.huibo.warnNotice.annotation.WarnNotice)")
  2. public void access() {
  3. }
  4. /**
  5. *假设 交心扔堕落误 企微提醒开辟职员
  6. *
  7. * @param joinPoint
  8. * @throws Exception
  9. */
  10. @AfterThrowing(value = "access()", throwing = "error")
  11. public void addErrorLogRecord(JoinPoint joinPoint, Exception error) throws Exception {
  12.     String errMsg = "";
  13.     String timeStamp = System.currentTimeMillis() + "";
  14.     log.error(timeStamp + ":" + "交心呈现非常 背设置的开辟职员倡议报告");
  15.     try {
  16.         Signature sig = joinPoint.getSignature();
  17.         MethodSignature msig = (MethodSignature) sig;
  18.         //按照aop参数获得到目标工具 获得到切里依据 反射战切里获得到办法署名战办法参数获得目标工具的办法  获得到办法的诠释 拿到诠释的属性
  19.         Object target = joinPoint.getTarget();
  20.         Object[] args = joinPoint.getArgs();
  21.         Method method = target.getClass().getMethod(msig.getName(), msig.getParameterTypes());
  22.         LocalVariableTableParameterNameDiscoverer u = new LocalVariableTableParameterNameDiscoverer();
  23.         WarnNotice annotation = method.getAnnotation(WarnNotice.class);
  24.         String methodName = annotation.value();
  25.         String[] parameterNames = u.getParameterNames(method);
  26.         Map<String, Object> paramMap = new HashMap<>();
  27.         if (parameterNames.length > 0) {
  28.             int i = 0;
  29.             for (String paramName : parameterNames) {
  30.                 paramMap.put(paramName, args[i]);
  31.             }
  32.         }
  33.         errMsg =   qwUserConfig.getEnvironment() + "情况:" + qwUserConfig.getModuleName() + "bug消息预警--\n  timeStamp:" + timeStamp + "\n  办法:" + methodName + "\n  param:" + JSON.toJSONString(paramMap) + "\n  error:" + error.getMessage();
  34.         sendQwMsg(errMsg);
  35.     } catch (Throwable e) {
  36.         log.error(timeStamp + ":收消息代码毛病  " + e.getMessage(), e);
  37.     } finally {  //将非常扔进来 接给全部非常处置器处置
  38.         if (error instanceof BizException) {
  39.             BizException e = (BizException) error;
  40.             log.error(timeStamp + e.getMessage(), e);
  41.             throw new BizException(e.getCode(), e.getMessage());
  42.         } else {
  43.             log.error(timeStamp + error.getMessage(), error);
  44.             throw new BizException(BizExceptionEnum.SYSTEM_ERROR);
  45.         }
  46.     }
  47. }`
复造代码
收收企微消息代码
  1. //那里实在即是挪用了一个http交心
  2. public void sendQwMsg(String errMsg) throws Exception {
  3.         log.info("errMsg:[{}]", errMsg);
  4.         LambdaQueryWrapper<QyAgentInfo> qw = new LambdaQueryWrapper<>();
  5.         qw.eq(QyAgentInfo::getIsDelete, 0)
  6.                 .eq(QyAgentInfo::getStatus, 1)
  7.                 .eq(QyAgentInfo::getCorpId, qwUserConfig.getCorpid())
  8.                 .last(" limit 1 ");
  9.         QyAgentInfo qyAgentInfo = qyAgentInfoMapper.selectOne(qw);
  10.         RestTemplate restTemplate = new RestTemplate();
  11.         log.info("qyAgentInfo:[{}]", JSON.toJSONString(qyAgentInfo));
  12.         URI uri = new URI(qwUserConfig.getSendurl() + qyAgentInfo.getAccessToken());
  13.         Map<String, Object> paramMap = new HashMap<>();
  14.         paramMap.put("touser", qwUserConfig.getTouser());
  15.         paramMap.put("msgtype", qwUserConfig.getMsgtype());
  16.         paramMap.put("agentid", qwUserConfig.getAgentid());
  17.         paramMap.put("safe", qwUserConfig.getSafe());
  18.         Map<String, Object> map = new HashMap<>();
  19.         map.put("content", errMsg);
  20.         paramMap.put("text", map);
  21.         RequestEntity<Map<String, Object>> requestEntity = RequestEntity.post(uri).
  22.                 contentType(MediaType.APPLICATION_JSON).body(paramMap);
  23.         ResponseEntity<QiWeiRes> exchange = restTemplate.exchange(requestEntity, QiWeiRes.class);
  24.         return;
  25.     }
复造代码
您需要登录后才可以回帖 登录 | 立即注册 qq_login

本版积分规则

发布主题
阅读排行更多+
用专业创造成效
400-778-7781
周一至周五 9:00-18:00
意见反馈:server@mailiao.group
紧急联系:181-67184787
ftqrcode

扫一扫关注我们

Powered by 职贝云数A新零售门户 X3.5© 2004-2025 职贝云数 Inc.( 蜀ICP备2024104722号 )