如何异步+队列实现接入阿里云事件监控

2023-11-05

阿里云监控服务可用于收集获取阿里云资源的监控指标或用户自定义的监控指标,探测服务可用性,以及针对指标设置警报。使您全面了解阿里云上的资源使用情况、业务的运行状况和健康度,并及时收到异常报警做出反应,保证应用程序顺畅运行。
在这里插入图片描述

阿里云事件监控文档地址

因为线上交易,退款,请求超时需要事件监控报警,公司服务器部署在阿里云,只需要接入阿里云的事件监控,我这里主要描述客户端如何实现异步+消息队列接入阿里云的事件监控,其实阿里云事件监控文档也有介绍,我这里主要是讲线上代码 应用。

首先是maven依赖:

<!--事件监控-->
<dependency>
     <groupId>com.aliyun.openservices</groupId>
     <artifactId>aliyun-cms</artifactId>
     <version>0.1.2</version>
 </dependency>

 <dependency>
     <groupId>com.fshows</groupId>
     <artifactId>fsframework-extend</artifactId>
     <version>1.2.9.3</version>
 </dependency>

实例化阿里事件监控代码:

 public static AliyunEventUtil getInstance(String accessKey, String secretKey) {
        if (instance == null) {
            Class var2 = AliyunEventUtil.class;
            synchronized(AliyunEventUtil.class) {
                if (instance == null) {
                    instance = new AliyunEventUtil(accessKey, secretKey);
                }
            }
        }

        return instance;
    }

单例方式实现阿里云事件监控客户端,AliyunEventUtil的变量修饰private static volatile AliyunEventUtil instance = null;

private AliyunEventUtil(String accessKey, String secretKey) {
		// 接入阿里云事件地址http://metrichub-cms-cn-hangzhou.aliyuncs.com 根据服务器部署在哪个区
        this.cmsClient = new CMSClient("http://metrichub-cms-cn-hangzhou.aliyuncs.com", accessKey, secretKey);
        // 事件的队列
        this.eventQueue = new LinkedBlockingQueue(10000);
        // 实现一个schedule定时线程池 核心线程是1
        this.schedule = new ScheduledThreadPoolExecutor(1, (new Builder()).namingPattern("aliyun-event-pool-%d").daemon(true).build());
        // 设置实现定时
        this.schedule.scheduleAtFixedRate(this, 5L, 1L, TimeUnit.SECONDS);
    }

这里普及一下ScheduledThreadPoolExecutor的基本知识:

// 核心线程数为1的定时线程池
public ScheduledThreadPoolExecutor(int corePoolSize,
                                   ThreadFactory threadFactory) {
    super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS,
          new DelayedWorkQueue(), threadFactory);
}//当达到延时时间initialDelay后,任务开始执行。上一个任务执行结束后到下一次
//任务执行,中间延时时间间隔为delay。以这种方式,周期性执行任务。
public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command,
                                                     long initialDelay,
                                                     long delay,
                                                     TimeUnit unit);

业务实现监控事件放入队列:

AliyunEventUtil aliyunEventUtil = AliyunEventUtil.getInstance("accessKey","secretKey");
 EventEntry entry = new EventEntry(StrUtil.format("test_{}", "little_sky"), groupId, event_name);
 boolean result = aliyunEventUtil.put(entry);
  if (!result) {
      System.out.println("fail");
  }

aliyunEventUtil.put 放入线程池的队列:

public boolean put(EventEntry event) {
        if (this.cmsClient == null) {
            return false;
        } else {
            boolean b = this.eventQueue.offer(event);
            if (!b) {
                LogUtil.warn(log, "事件队列已满,丢弃事件:{}", new Object[]{event});
                return false;
            } else {
                return true;
            }
        }
    }
// 定时线程池执行的方法
public void run() {
        do {
            this.batchPut();
        } while(this.eventQueue.size() > 10);

    }

  private void batchPut() {
      List<CustomEvent> events = new ArrayList();

      for(int i = 0; i < 99; ++i) {
      // 从队列取出来
          EventEntry e = (EventEntry)this.eventQueue.poll();
          if (e == null) {
              break;
          }

          events.add(CustomEvent.builder().setContent(e.getContent()).setName(e.getName()).setGroupId(e.getGroupId()).build());
      }

      if (!events.isEmpty()) {
          this.uploadEventBatch0(events);
      }
  }

最终请求阿里云的事件监控

private boolean uploadEventBatch0(List<CustomEvent> eventList) {
        try {
            if (eventList != null && !eventList.isEmpty()) {
                CustomEventUploadRequest request = (CustomEventUploadRequest)CustomEventUploadRequest.builder().setEventList(eventList).build();
                CustomEventUploadResponse response = this.cmsClient.putCustomEvent(request);
                if (response == null) {
                    return false;
                } else if (!"200".equals(response.getCode())) {
                    LogUtil.error(log, "AliyunEventUtil ---- >> uploadEventBatch 上传异常,返回结果:requestId={}, code = {},message={}", new Object[]{response.getRequestId(), response.getCode(), response.getMessage()});
                    return false;
                } else {
                    return true;
                }
            } else {
                return false;
            }
        } catch (CMSException var4) {
            LogUtil.error(log, "AliyunEventUtil ---- >> uploadEvent 上传异常: Ex = {}", var4);
            this.cmsClient = null;
            return false;
        }
    }

参考文章:https://www.jianshu.com/p/502f9952c09b(线程池之ScheduledThreadPoolExecutor)

https://www.cnblogs.com/WangHaiMing/p/8798709.html (BlockingQueue深入解析-BlockingQueue看这一篇就够了)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何异步+队列实现接入阿里云事件监控 的相关文章

  • IIS搭建本地电脑服务器:通过内网穿透技术实现公网访问的步骤指南

    1 前言 在网上各种教程和介绍中 搭建网页都会借助各种软件的帮助 比如网页运行的Apache和Nginx 数据库软件MySQL和MSSQL之类 为方便用户使用 还出现了XAMPP PHPStudy 宝塔面板等等一系列集成服务 都是为了方便我
  • 阿里云服务器搭建FRP实现内网穿透-转发

    前言 1 什么是frp frp是一个专注于内网穿透的高性能的反向代理应用 支持TCP UDP HTTP HTTPS等多种协议 且支持P2P通信 可以将内网服务以安全 便捷的方式通过具有公网IP节点的中专暴露到公网 2 演示环境 一 frp软
  • 使用nps内网穿透的问题记录

    实现目标 将局部网 可访问互联网 设备的端口映射到公网服务器上 1 资料准备 下载nps server 和npc client 安装包 https github com ehang io nps releases 文档 https ehan
  • MES管理系统的哪些优势对企业帮助比较大

    随着全球制造业的快速发展 MES制造执行系统已成为企业生产管理的重要工具 MES管理系统解决方案集成了企业生产流程中的各个环节 包括计划 调度 质量 设备等 为企业提供了全面的生产管理解决方案 制造企业MES系统的优势颇多 其中对企业帮助比
  • 阿里云CDN缓存预热与刷新以及常见的故障汇总

    文章目录 1 为CDN缓存的文件增加过期时间 2 CDN缓存预热配置 3 CDN缓存刷新配置 4 常见故障 CDN缓存预热指的是主动将要缓存的文件推送到全国各地的CDN边缘加速器上 减少回源率 提供命中率 缓存刷新指的是后期上传了同名的文件
  • 2022年 hust OJ 最新搭建方式

    文章目录 一 准备环境 二 hust oj 搭建 三 踩坑 一 准备环境 1核2G 服务器一台 腾讯云 阿里云均可 现在可能买不到了 2核2G 的也可以 xshell windterm 连接服务器的工具 二 hust oj 搭建 HustO
  • DBeaver连接阿里云mysql步骤

    DBeaver连接阿里云mysql步骤 dbeaver是免费和开源 GPL 为开发人员和数据库管理员通用数据库工具 重点是免费并且很好用 本人因为navicat收费而经网友推荐发现这个软件 这个真是个宝藏软件 由于这个过程也是我慢慢摸索的
  • CentOS8更换阿里源及解决yum update报错问题

    CentOS更换阿里源 yum makecache提示错误 为 repo base 下载元数据失败 Cannot download repomd xml Cannot download repodata repomd xml All mir
  • 阿里云服务器租用费用清单表(CPU内存带宽磁盘)

    阿里云服务器租用费用包括CPU内存 公网带宽和系统盘三部分 云服务器购买可以选择活动机型也可以选择自定义购买 活动机型配置固定选择不自由 自定义购买配置自由选择但是费用贵的一批 阿里云百科来详细说下云服务器1核2G 2核4G 4核8G 8核
  • 嵌入式物联网协议--MQTT

    本文使用MQTT 3 1 1版本 目录 一 MQTT简介 1 什么是MQTT 2 MQTT本质 3 MQTT报文类型 4 MQTT Qos质量 二 14个报文详解 1 CONNECT报文 1 C gt S 固定报头 可变报头 负载 1 固定
  • 【教程】详解如何将云服务器从一个平台转移到腾讯云服务器

    转载请注明出处 小锋学长生活大爆炸 xfxuezhang cn 背景介绍 我现在有一台华为云服务器 但是快到期了 考虑到腾讯云服务器比较便宜 可以看这里 特惠产品合集页 因此想转过来 但华为云上东西 环境都存满了 如果重新搭建 那未免太麻烦
  • 巴比特

    摘要 9 月 13 日 阿里云宣布通义千问大模型已首批通过备案 并正式向公众开放 百度发布文心一言插件生态平台 灵境矩阵 向广大开发者开启邀测 并提供百亿流量 亿元基金等激励措施 扶持插件生态建设 图片来源 由无界AI生成 热点资讯 百度发
  • 如何快速检测代理IP质量?方法与工具全干货

    一直以来 IP代理都是出海跨境业务的刚需 质量好的IP代理 除了在跨境业务产生巨大作用 在SEO监控 爬虫抓取 市场研究等领域也发挥着很大的作用 但是 对于IP代理的质量检测是我们选择高标准IP代理的一句 我们一般都会建议在使用IP代理前
  • 阿里云CDN架构接入WAF应用防火墙案例实践

    文章目录 1 网站架构变化 2 配置WAF应用防火墙 2 1 配置网站接入WAF防火墙 2 2 WAF防火墙生成CNAME地址 2 3 配置WAF防火墙HTTPS证书 2 4 WAF防火墙开启HTTP回源SLB 3 配置CDN加速器回源WA
  • 应用编排与管理:核心原理

    本节课程要点 K8s 资源的重要元信息 使用阿里云服务演示一下如何去修改或查看 K8s 重要元数据 详细分析控制器模式 总结控制器模式特点 资源元信息 1 Kubernetes 资源对象 首先 我们来回顾一下 Kubernetes 的资源对
  • 国际版阿里云/腾讯云:阿里云流量包是用来做什么

    阿里云流量包是用来做什么 阿里云同享流量包是一种通用流量套餐 同享流量包具有多地域和多产品流量抵扣的优势 同享流量包不仅能够抵扣云服务器ECS发生的流量 还能够抵扣弹性公网IP和负载均衡SLB发生的流量 同享流量包掩盖产品规模广 同享流量包
  • 逍遥子突然辞去阿里一切职务!之前不再担任董事长,现在阿里云CEO也卸了

    金磊 发自 凹非寺量子位 公众号 QbitAI 阿里巴巴史上最大架构重组仅半年后 再次迎来重大变革 原集团CEO张勇 花名 逍遥子 正式卸任 同时辞去阿里云董事长和CEO职务 这一次 阿里巴巴掌门的接力棒交到了蔡崇信和吴泳铭 花名 东邪 手
  • 阿里云服务器地域怎么选择?哪个地域好?

    阿里云服务器地域和可用区怎么选择 地域是指云服务器所在物理数据中心的位置 地域选择就近选择 访客距离地域所在城市越近网络延迟越低 速度就越快 可用区是指同一个地域下 网络和电力相互独立的区域 可用区之间可以做到故障隔离 将应用部署到不同可用
  • 阿里云服务器地域怎么选择?哪个地域好?

    阿里云服务器地域和可用区怎么选择 地域是指云服务器所在物理数据中心的位置 地域选择就近选择 访客距离地域所在城市越近网络延迟越低 速度就越快 可用区是指同一个地域下 网络和电力相互独立的区域 可用区之间可以做到故障隔离 将应用部署到不同可用
  • 阿里云2核4G服务器优惠价格30元3个月?小心坑

    2024年阿里云2核4G服务器优惠价格30元3个月 活动 https t aliyun com U bLynLC 配置为云服务器ECS经济型e实例ecs e c1m2 large 3M固定带宽 系统盘为40GB ESSD Entry 活动打

随机推荐

  • java项目部署到linux系统上出现java.lang.OutOfMemoryError: PermGen space错误

    http blog csdn net wyzfairy article details 37879509 今天一个之前运行没问题 在本地测试页没问题的Java项目部署到Linux系统之后 在登录时出现java lang OutOfMemor
  • Web前端-Vue ElementUI点击Table 索引行获取index处理

    需求 在table中row行 index 0 作为区头 数据字符展示 参考组件 Element The world s most popular Vue UI framework 1 table中有一个 row class name tab
  • git显示不出绿色的小图标的解决方法

    大家好 我是曜耀 今天我来为大家讲解一下 电脑安装git显示不了绿色的小图标的问题 对于刚刚安装了git的我们 有一部分会遇到在操作过程 win会显示不出 git该用的图标 对此我们会很烦恼 我也是其中一员 不过我在网上找了很多解决的方法
  • android版本下载地址 http,Android ADT下载地址(含各版本)

    Android ADT下载地址 含各版本 2019年12月04日 阅读数 26 这篇文章主要向大家介绍Android ADT下载地址 含各版本 主要内容包括基础应用 实用技巧 原理机制等方面 希望对大家有所帮助 ADT百度云下载连接 含各版
  • 服务器:在腾讯轻量级服务器上传jar包并运行jar

    前言 本期项目使用springboot开发 最终将项目生产的jar包需要上传至云服务器运行 方便自己的小程序端和web端去访问 本文将jar包的运行与主要命令进行说明 jar包生成 项目打包前 需要保证其正确性 最好先运行后在打包 具体的打
  • 针对 微信小程序 的 getUserInfo 接口废弃,不能弹出授权窗口的问题

    getUserInfo 接口废弃说明 官方给出的废弃getUserInfo接口的通知链接 小程序登录 用户信息相关接口调整说明 废弃时间 2021年4月28日以后 废弃后的使用情况 无法通过wx getUserInfo与
  • 从输入网址到页面呈现的详细过程

    面试题经典题目 简要回答如下 a 域名解析 b 发起TCP连接的三次握手 c 建立TCP连接后发起http请求 d 服务端响应http请求 返回响应报文 e 浏览器页面渲染 f 断开TCP连接 下面详细介绍 a 域名解析 DNS解析 当在浏
  • 计算机上的无线网络开关怎么打开,联想笔记本无线网络开关怎么打开

    当我们买到笔记本电脑的时候 我们会不会就会急着想上网看一下呢 女生会选择第一时间追一下剧 男生呢 就会想下载一个游戏来刺激一下 那消费者知不知道无线网络开关是怎么开的吗 下面小编就给大家说说联想笔记本无线网络开关怎么打开 打开无线网络开关的
  • 开发人员谈测试:如何写出简洁又规范的单元测试

    文章转载链接 http www 51testing com html 83 n 4480883 html 我们之前谈到过要让开发人员认识到测试的重要性并了解测试 本文的主要重点是针对日常开发阶段工程师可以做的事情 也就是单元测试而展开 编写
  • 分布式锁看这篇就够了

    https blog csdn net tzs 1041218129 article details 80086991 关注我 转载请务必注明原创地址为 http www 54tianzhisheng cn 2018 04 24 Distr
  • STM32外设系列—HC-05(蓝牙)

    文章目录 一 蓝牙简介 二 使用方法 2 1 接线 2 2 AT指令 三 蓝牙APP 四 实战项目 4 1 添加文件 4 2 配置需要传递的参数 4 3 获取返回值 4 4 发送光照强度 4 5 控制程序 4 6 手机端页面设计 4 6 1
  • python的学习心得与知识总结

    1 字符串格式化表达式 作用 生成一定格式的字符串 运算符 语法格式 格式字符串 参数值 或 格式字符串 参数值1 参数值2 参数值3 说明 左侧为格式格式字符串 右侧为参数值 当有多个参数值时用 括号 括起来 并用逗号 隔开 格式化字符串
  • 基于java的饮食分享平台系统毕业设计(源代码+数据库+部署文档+部署视频)

    摘要 本篇论文主要介绍了基于Java的饮食分享平台系统的设计与实现 通过对现有饮食分享平台的分析和用户需求的调研 本设计采用Java语言进行系统开和编码 首先分析了饮食分享平台的背景和相关知识 然后提出了系统的需求和设计方案 接着详细介绍了
  • 自定义解密注解

    在开发中 有时候会遇到前端body加密 后端解密操作 接下来用注解实现 1 新增DecodeRequestBodyAdvice类 package com xx advice import lombok extern slf4j Slf4j
  • 图卷积 节点分类_了解图卷积网络以进行节点分类

    图卷积 节点分类 Neural Networks have gained massive success in the last decade However early variants of Neural Networks could
  • 如何学习数学分析

    如何学习数学分析 数学分析的研究定位 一直以来都是书到用时方恨少 刚毕业那会学的是计算机 从事算法工程师岗位 然后基础人工智能算法 在遗传BP 神经网络 旅行商问题上接触了很多数学知识 到后来的机器人导航工程师又做了路径规划 设计到视觉SL
  • 1.pwn基础总结

    基本概念 exploit 用于攻击的脚本与方案 通常缩写为exp payload 攻击载荷 是的目标进程被劫持控制流的数据 shellcode 调用攻击目标的shell的代码 打开目标的shell 获取目标控制权 pwn解题基本流程 che
  • CBC字节翻转攻击解析

    CBC字节翻转攻击解析 一 分组密码的模式 分组密码的主要模式有5种 ECB模式 电子密码本模式 Electronic CodeBook mode CBC模式 密码分组链接模式 Cipher Block Chaining mode CFB模
  • 可重入锁-Reentrant

    Reentrant Re entrant 可重复进入 什么叫可重入 线程可以进入任何一个它已经拥有的锁所同步着的代码块 可重锁作用 防止死锁 常用的可重入锁 JDK ReentrantLock java util concurrent lo
  • 如何异步+队列实现接入阿里云事件监控

    阿里云监控服务可用于收集获取阿里云资源的监控指标或用户自定义的监控指标 探测服务可用性 以及针对指标设置警报 使您全面了解阿里云上的资源使用情况 业务的运行状况和健康度 并及时收到异常报警做出反应 保证应用程序顺畅运行 阿里云事件监控文档地