SpringBoot使用xxl-job分布式任务调度平台定时检测RabbitMQ的消息队列自动发出钉钉警告消息

文章目录

  • SpringBoot使用xxl-job分布式任务调度平台定时检测RabbitMQ的消息队列自动发出钉钉警告消息
    • 1、在pom.xml中导入xxl-job的maven依赖,可以看我这篇文章使用抽离出来的xxl-job的starter
    • 2、配置xxl-job的相关配置,若上一步使用了自己创建的starter则不用写下面的XxlJobConfig
    • 3、配置xxl-job相关的application.properties
    • 4、编写调度任务代码,实现检测rabbitmq中所有的消息队列并发送钉钉消息
    • 5、进入xxl-job的任务调度中心,新建执行器和任务
      • 5.1、新建执行器,AppName为 xxl.job.executor.appname=my-app中的==my-app==
      • 5.2、新建任务,@XxlJob("call-rabbitmq-s")中的call-rabbitmq-s
    • 6、启动SpringBoot项目,稍等刷新可以看到刚才新建的执行器的OnLine 机器地址为本机的ip,然后在调度中心开启刚才所建立的任务

SpringBoot使用xxl-job分布式任务调度平台定时检测RabbitMQ的消息队列自动发出钉钉警告消息

1、在pom.xml中导入xxl-job的maven依赖,可以看我这篇文章使用抽离出来的xxl-job的starter

手写SpringBoot项目所使用的xxl-job分布式任务调度平台的starter

 <!--		<dependency>-->
<!--           <groupId>com.xuxueli</groupId>-->
<!--            <artifactId>xxl-job-core</artifactId>-->
<!--            <version>2.4.0</version>-->
<!--        </dependency>--><!--  自己抽离的starter,如果没有就用上面的普通依赖即可--><dependency><groupId>cn.fpl</groupId><artifactId>xxl-job-starter</artifactId><version>1.0-SNAPSHOT</version></dependency>

2、配置xxl-job的相关配置,若上一步使用了自己创建的starter则不用写下面的XxlJobConfig

/** Copyright (c) 2020, 2024, fpl1116.cn All rights reserved.**/
package com.fpl.xxljob;import cn.hutool.core.net.NetUtil;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** <p>Project: spring-job - XxlJobConfig</p>* <p>Powered by fpl1116 On 2024-04-16 11:28:16</p>* <p>描述:<p>** @author penglei* @version 1.0* @since 1.8*/
@Configuration
public class XxlJobConfig {private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);@Value("${xxl.job.admin.addresses}")private String adminAddresses;@Value("${xxl.job.accessToken}")private String accessToken;@Value("${xxl.job.executor.appname}")private String appname;@Value("${xxl.job.executor.address}")private String address;@Value("${xxl.job.executor.ip}")private String ip;@Value("${xxl.job.executor.logpath}")private String logPath;@Value("${xxl.job.executor.logretentiondays}")private int logRetentionDays;@Beanpublic XxlJobSpringExecutor xxlJobExecutor() {logger.info(">>>>>>>>>>> xxl-job config init.");XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();xxlJobSpringExecutor.setAdminAddresses(adminAddresses);xxlJobSpringExecutor.setAppname(appname);xxlJobSpringExecutor.setAddress(address);xxlJobSpringExecutor.setIp(ip);//通过hutool工具获取一个本机可用端口int usableLocalPort = NetUtil.getUsableLocalPort();xxlJobSpringExecutor.setPort(usableLocalPort);xxlJobSpringExecutor.setAccessToken(accessToken);xxlJobSpringExecutor.setLogPath(logPath);xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);return xxlJobSpringExecutor;}}

3、配置xxl-job相关的application.properties

# XXL-JOB 相关配置# 安装xxl-job服务的ip和端口
xxl.job.admin.addresses=http://localhost:8080/xxl-job-admin
xxl.job.accessToken=my-access-token
xxl.job.executor.appname=my-app
xxl.job.executor.address=
xxl.job.executor.ip=127.0.0.1
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
xxl.job.executor.logretentiondays=30

4、编写调度任务代码,实现检测rabbitmq中所有的消息队列并发送钉钉消息

@XxlJob("call-rabbitmq-s")public void demoJobHandler3() throws Exception {String jobParam = XxlJobHelper.getJobParam();HashMap paramObj = JSONUtil.toBean(jobParam, HashMap.class);Object host = paramObj.get("host");Object port = paramObj.get("port");String rabbitMQUrl = StrUtil.format("http://{}:{}/api/queues",host,port);String body = HttpRequest.of(rabbitMQUrl).method(Method.GET).header("Authorization", "Basic Z3Vlc3Q6Z3Vlc3Q=").execute().body();// 解析队列详情,获取 messagesJSONArray queues = JSONUtil.parseArray(body);for (Object queue : queues){JSONObject queueDetailsJSON = JSONUtil.parseObj(queue);Object messages = queueDetailsJSON.get("messages");Object queueName = queueDetailsJSON.get("name");int messageCount = Integer.parseInt(messages.toString());if(messageCount >= 5){log.debug("报警-> 队列{},消息数量:{}",queueName,messageCount);String url1 = "";//你的钉钉机器人的key,并将机器人安全设置的自定义关键词设置为 报警JSONObject msg = new JSONObject();msg.set("msgtype", "text");// 使用 String.format() 格式化文本字符串,并用 queueName 和 messageCount 替换占位符String formattedText = String.format("报警-> 队列%s,消息数量:%d", queueName, messageCount);// 创建一个新的 JSONObject 用于存储文本内容,并将其 "content" 字段设置为格式化后的文本字符串msg.set("text", new JSONObject().put("content", formattedText));//            msg.set("at", new JSONObject().set("isAtAll", true));String json = JSONUtil.toJsonStr(msg);String result = HttpRequest.post(url1).body(json).execute().body();} else {log.debug("正常");}log.info("参数:{}",jobParam);}}

5、进入xxl-job的任务调度中心,新建执行器和任务

5.1、新建执行器,AppName为 xxl.job.executor.appname=my-app中的my-app

@XxlJob(“call-rabbitmq-s”)中的call-rabbitmq-s
在这里插入图片描述

5.2、新建任务,@XxlJob(“call-rabbitmq-s”)中的call-rabbitmq-s

在这里插入图片描述

6、启动SpringBoot项目,稍等刷新可以看到刚才新建的执行器的OnLine 机器地址为本机的ip,然后在调度中心开启刚才所建立的任务

在这里插入图片描述

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

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

相关文章

Python基于深度学习的车辆特征分析系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

RTT学习

定时器的管理方式 在系统启动时需要初始化定时器管理系统。 void rt_system_timer_init(void);如果需要使用SOFT_TIMER&#xff0c;则系统初始化时&#xff0c;应该调用 void rt_system_timer_thread_init(void);定时器控制块中含有定时器相关的重要参数&#xff0c;在定时器…

高标准化及可扩展的产品能力,助力声通科技运营效率不断提升

高标准化及可扩展的产品能力对企业发展具有重要意义&#xff0c;有助于企业提高运营效率、增强市场竞争力&#xff0c;并推动企业实现规模化发展。上海声通信息科技股份有限公司&#xff08;下文称&#xff1a;声通科技或公司&#xff09;作为我国领先的企业级全栈交互式人工智…

ViM-UNet:用于生物医学细分的 Vision Mamba

ViM-UNet&#xff1a;用于生物医学细分的 Vision Mamba 摘要IntroductionMethod and Experiments结果与讨论 ViM-UNet: Vision Mamba for Biomedical Segmentation 摘要 卷积神经网络&#xff08;CNNs&#xff09;&#xff0c;尤其是UNet&#xff0c;是生物医学分割的默认架构…

Java报表是什么?盘点2023最实用的四款Java报表

从字面义就可以推知&#xff0c;Java报表指的是在Java环境下开发或使用的报表工具。Java语言因其功能强大和简单易用的特点&#xff0c;是静态面向对象编程语言的代表&#xff0c;在Java环境开发使用的这些报表工具&#xff0c;可以通过提供可视化操作界面制作报表&#xff0c;…

如果补货机器人也开始搬砖

过去几年&#xff0c;如果一位顾客的欲购商品疑似缺货&#xff0c;“请稍等&#xff0c;我去后台查一下”便是最常听到的一句话。随着过去几年劳动力短缺的加剧&#xff0c;货架并不总像许多人习惯的那样满满当当。为减轻不断补货的负担&#xff0c;使员工可以将精力集中于其他…

LINUX网卡一般性问题分析

一、网卡相关概念 网卡&#xff1a;网卡是一块被设计用来允许计算机在计算机网络上进行通讯的计算机硬件。 网络模型&#xff1a;OSI网络模型、TCP/IP网络模型 LINUX网络收发流程&#xff1a; 1. 内核分配一个主内存地址段&#xff08;DMA缓冲区)&#xff0c;网卡设备可以在…

【微信小程序之分包】

微信小程序之分包 什么是分包分包的好处分包前的结构图分包后的结构图分包的加载规则分包的体积限制使用分包打包原则引用原则独立分包独立分包的配置方法独立分包的引用原则分包预下载配置分包的预下载分包预下载限制 什么是分包 分包指的是把一个完整小程序项目&#xff0c;…

大模型LLM基于本地ollama平台的RAG数据增强的文档问答系统调试

环境&#xff1a;python 3.10.13 1. 加载文档 import bs4 from langchain_community.document_loaders import WebBaseLoader# Only keep post title, headers, and content from the full HTML. bs4_strainer bs4.SoupStrainer(class_("post-title", "post-…

SpringBoot 中获取yml文件的值

获取yml配置文件的值 获取yml配置的值&#xff0c;可以用Value注解去获取 Value("${键名}")使用方法&#xff1a;例如配置文件存放一个学生的信息&#xff1a; student:name: lisiage: 13获取该学生的的name Value("${student.name}")获取yml的值 还可…

2024-14.python前端+Django

第四篇 web前端 第1章 、Web的基本概念 前端基础总共分为三部分&#xff1a;html、css和js。 1.3、HTTP协议 1.3.1 、http协议简介 HTTP协议是Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;的缩写,是用于万维网&#xff08;WWW:World Wide Web &am…

AI人工智能老师大模型讲师叶梓 OneLLM:开创性的多模态大型语言模型技术

在人工智能领域&#xff0c;多模态大型语言模型&#xff08;MLLM&#xff09;的研究一直是一个热门话题。近期&#xff0c;一种名为OneLLM的创新技术引起了业界的广泛关注。OneLLM通过其独特的统一框架&#xff0c;实现了多种不同模态与自然语言的高效对齐&#xff0c;为多模态…

6-129 统计二叉树叶子结点的个数(Python语言描述)

本题要求计算二叉树中有多少片树叶,输出格式见样例。 函数接口定义: #树叶统计 def leafCount(T)其中二叉树类的定义如下: #二叉树的存储-二叉链表 class BinaryTree:#1.构造方法def __init__(self,newValue):self.key = newValue #树根self.left = None #左子…

操作系统—GCC与编译全流程

文章目录 GCC与编译全流程1.GCC是什么&#xff1f;2.编译全流程(1).GCC到底做了哪些事情&#xff1f;(2).预处理I.预处理会做什么II.预处理器主要包含什么&#xff1f;III.宏的一些魔法 (3).编译I.基本流程II.编译优化III.一点例子 (4).汇编(5).链接(6).说到这里&#xff0c;为…

解剖this指针

目录 this指针的理解 1. this指针的用处 2.this指针的使用 3.this指针的使用 this指针来源 this指针的理解 通常在class定义时要用到类型变量自身时&#xff0c;因为这时候还不知道变量名&#xff08;为了通用也不可能固定实际的变量名&#xff09;&#xff0c;就用this这样…

在 CentOS 上安装 Docker 和 Docker Compose

在 CentOS 上安装 Docker 和 Docker Compose 的步骤如下&#xff1a; 首先&#xff0c;安装 Docker&#xff1a; 卸载旧版本的 Docker&#xff1a; sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker…

Java面试 Day03

接口和抽象类有什么区别static和final有什么区别JVM加载类如何索引优化MySQL采用什么结构存储索引 为什么搜索算法有了解吗线程同步的几个方案&#xff0c;以及原理final关键词JVM调优&#xff0c;OOM经历隔离级别&#xff0c;InnoDB中几个隔离级别的原理Linux常用命令Redis可靠…

windows网络驱动开发

基石&#xff1a;WFP 1、简介 Windows过滤平台&#xff08;Windows Filtering Platform, WFP&#xff09;&#xff0c;是从Vista系统后新增的一套系统API和服务。开发者可以在WFP框架已划分的不同分层中进行过滤、重定向、修改网络数据包&#xff0c;以实现防火墙、入侵检测系…

电机控制器电路板布局布线参考指导(五)

电机控制器电路板布局布线参考指导&#xff08;五&#xff09;大容量电容和旁路电容的放置 1.大容量电容的放置2.电荷泵电容器3.旁路电容/去耦电容的放置3.1 靠近电源3.2 靠近功率器件3.3 靠近开关电流源3.4 靠近电流感测放大器3.5 靠近稳压器 tips&#xff1a;资料主要来自网络…

Java旅行商问题知识点(含面试大厂题和源码)

旅行商问题&#xff08;Travelling Salesman Problem&#xff0c;简称TSP&#xff09;是组合优化中的一个经典问题。问题的目标是找到最短可能的路径&#xff0c;让旅行商从一个城市出发&#xff0c;经过所有其他城市恰好一次&#xff0c;然后回到起始城市。 TSP是一个NP-hard…