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

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(使用前将#替换为@)

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

  • 域名限制注册有哪些原因?

    关注我们 获取更多域名相关知识 首先 英文域名的注册有几个基本规则 分别是 只能使用英文字母 a z 不区分大小写 数字 0 9 以及连接符 不支持使用空格及以下字符 等 连接符 不能连续出现 不能单独注册 也不能放在开头和结尾 域名长度不
  • 阿里云移动推送的接入和踩坑

    近期由于业务需求 要换掉以前的推送 首先选择了阿里云推送 官方介绍阿里移动推送 Alibaba Cloud Mobile Push 是基于大数据的移动智能推送服务 帮助App快速集成移动推送的功能 在实现高效 精确 实时的移动推送的同时 极
  • 阿里云无影云电脑是干什么用的?五大使用场景

    阿里云无影云电脑是一种易用 安全 高效的云上桌面服务 阿里云无影云电脑可用于高数据安全管控 高性能计算等要求的金融 设计 视频 教育等领域 适用于多种办公场景 如远程办公 多分支机构 安全OA 短期使用 专业制图等 阿里云百科来简单分享什么
  • 阿里云1核1G内存1M宽带可以支持多少IP访问量?

    阿里云1核CPU 1G内存 1M公网宽带云服务器够用吗 1M宽带可以支持多少IP的访问量 来说说1M宽带可以跑多少流量及1核1G服务器配置性能 1核 1G 1M宽带配置能跑多少IP 一般来讲 如果图片不多 每天3000PV是没问题的 如果将
  • 什么是住宅ip,静态和动态怎么选?

    上文我们介绍了数据中心代理 这次我们来介绍下住宅代理ip 住宅代理ip分类两种类型 静态住宅代理和动态住宅代理 他们有什么区别又能用在什么场景呢 我们先从他们是如何运作开始 一 什么是住宅代理ip isp住宅代理ip我们称为真人住宅代理 地
  • 连接Windows服务器出现Credssp错误的解决方法

    连接Windows服务器出现Credssp错误的解决方法 问题描述 在使用远程桌面连接登录Windows系统的服务器时 提示以下信息 经过排查 确认用户名和密码都没问题 重置密码也无法登录 热门活动 2020年阿里云双12爆款拼团特惠活动
  • MES管理系统的哪些优势对企业帮助比较大

    随着全球制造业的快速发展 MES制造执行系统已成为企业生产管理的重要工具 MES管理系统解决方案集成了企业生产流程中的各个环节 包括计划 调度 质量 设备等 为企业提供了全面的生产管理解决方案 制造企业MES系统的优势颇多 其中对企业帮助比
  • 阿里云服务器包年包月、按量和抢占式实例怎么选?区别是什么?

    阿里云服务器ECS付费类型包年包月 按量付费和抢占式实例有什么区别 包年包月先付费后使用 最低购买一个月时长 平均下来成本较低 按量付费先使用后付费 按小时结算费用 适合短期使用 平均下来费用要比包年包月贵一些 抢占式实例和按量付费相类似
  • 阿里云配置MINIO图床

    阿里云 ECS服务器 CENTOS7系统部署MINIO图床 1 下载MINIO的二进制文件 注 阿里云ECS网速过慢 但可以接受 wget https dl minio io server minio release linux amd64
  • CentOS8更换阿里源及解决yum update报错问题

    CentOS更换阿里源 yum makecache提示错误 为 repo base 下载元数据失败 Cannot download repomd xml Cannot download repodata repomd xml All mir
  • 【教程】详解如何将云服务器从一个平台转移到腾讯云服务器

    转载请注明出处 小锋学长生活大爆炸 xfxuezhang cn 背景介绍 我现在有一台华为云服务器 但是快到期了 考虑到腾讯云服务器比较便宜 可以看这里 特惠产品合集页 因此想转过来 但华为云上东西 环境都存满了 如果重新搭建 那未免太麻烦
  • 如何快速检测代理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
  • 高防cdn和高防服务器的区别,有什么不一样

    CDN通俗的理解就是网站加速 可以解决跨运营商 跨地区 服务器负载能力过低 带宽过少等带来的网站打开速度慢等问题 一个网站的服务器性能比较差 负载能力有限 优势面临突发流量 招架不住 直接导致服务器奔溃 网站打不开 CDN 跟 高防服务器
  • 阿里云无影云电脑怎么买?阿里无影云电脑教程

    可以理解成一台普通的远程连接的电脑不能用于建站之类 纯粹处理办公文档一类 阿里云无影云电脑怎么买 云电脑无影在哪里买 阿里云无影云电脑已经底调上线 可以在阿里云官方云小站购买 目前 阿里云无影云电脑针对新用户有优惠活动 mini版无影云电脑
  • Linux安装jenkins

    本文基于阿里云租的服务器 centos8版本下安装jenkins 1 安装jenkins 首先先登录jenkins官网去下载对应的包 地址 Jenkins 在上图中选择版本下载即可 下载完上传到你的linux中 如下图所示 至于存放的地址没
  • 逍遥子突然辞去阿里一切职务!之前不再担任董事长,现在阿里云CEO也卸了

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

    阿里云添加二级域名 1 申请配置域名 1 1 购买域名 1 2 登录到阿里云服务器控制台 进入云解析DNS页面 1 3 点击 域名解析 1 4 点击 添加记录 1 5 进行txt校验 1 6 添加记录
  • 阿里云一二级域名配置

    一级域名配置 二级域名配置
  • 阿里云服务器地域怎么选择?哪个地域好?

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

随机推荐

  • 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
  • 如何异步+队列实现接入阿里云事件监控

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