032-从零搭建微服务-定时服务(一)

写在最前

如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。

源码地址(后端):mingyue: 🎉 基于 Spring Boot、Spring Cloud & Alibaba 的分布式微服务架构基础服务中心

源码地址(前端):mingyue-ui: 🎉 基于 Vue3 + TS + Vite + Element plus 等技术,适配 MingYue 后台微服务

文档地址:Wiki - Gitee.com

分布式任务调度框架

Java 常见的分布式任务调度框架主要是 Quartz 与 Xxl-Job,还有一股新势力 PowerJob。这里简单介绍一下他们三个,并横向对比一下。

Quartz

  • 特点:Quartz是一个功能强大的任务调度框架,适用于定时任务、计划任务等。它支持多种触发器类型,如SimpleTrigger和CronTrigger,以及任务状态管理、监听器、集群部署等功能。

  • 适用场景:Quartz适合一般的任务调度需求,特别是那些需要高度可配置性和定制性的场景。它在单机和小规模分布式环境中表现出色。

XXL-Job

  • 特点:XXL-Job是一个专注于分布式任务调度的平台,提供任务管理中心、执行器节点、任务依赖、分布式执行等特性。它具有简单的Web界面和管理功能,适合处理大规模分布式任务。

  • 适用场景:XXL-Job适合大规模分布式任务的定时调度和管理,如数据同步、报表生成等。它具有高可用性、伸缩性和任务管理功能。

PowerJob

  • 特点:PowerJob(Hydrogen Job)是一个开源的分布式任务调度框架,旨在提供高性能、高可用性、易用性和可扩展性。它支持分布式任务的执行、任务定义、任务依赖、分布式锁等功能。

  • 适用场景:PowerJob适用于需要高性能和可扩展性的大规模分布式任务。它提供了任务调度中心、执行器节点、任务依赖等特性,可用于各种数据处理、ETL和任务调度场景。

如何抉择

适合的才是最好的~

  • 如果你需要一个通用的任务调度框架,Quartz 是一个不错的选择,特别是在单机或小规模分布式环境中。

  • 如果你需要在大规模分布式环境中管理任务调度,XXL-Job 或 PowerJob 是更合适的,它们提供了分布式任务执行和管理的特性,适合处理大量任务。

  • XXL-Job 更加关注易用性和任务管理,PowerJob 注重性能和扩展性,具有更高的性能和弹性。

Quartz 比较老了,对分布式的支持不太友好,对于微服务项目来说不太建议。PowerJob 没用过,基于目前的场景来说暂时用不到,后续可以考虑。本项目先使用 XXL-Job 作为分布式管理任务调度框架。

mingyue-common-job

新建模块引入依赖

核心依赖 xxl-job-core

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId></dependency>
​<!-- 服务发现组件 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-commons</artifactId></dependency>
​<!-- xxl-job-core --><dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId></dependency>
​<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>
​<dependency><groupId>com.csp.mingyue</groupId><artifactId>mingyue-common-core</artifactId></dependency>
</dependencies>

mingyue-xxl-job-admin

新建模块引入依赖

核心依赖 mingyue-common-job

<dependencies><!-- SpringCloud Alibaba Nacos --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
​<!-- SpringCloud Alibaba Nacos Config --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>
​<!-- SpringCloud Alibaba Sentinel --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency>
​<!-- starter-test:junit + spring-test + mockito --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
​<!-- freemarker-starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId></dependency>
​<!-- mail-starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency>
​<!-- starter-actuator --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>
​<!-- mybatis-starter:mybatis + mybatis-spring + hikari(default) --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency>
​<!-- mysql --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId></dependency>
​<dependency><groupId>com.csp.mingyue</groupId><artifactId>mingyue-common-web</artifactId></dependency>
​<!-- xxl-job-core --><dependency><groupId>com.csp.mingyue</groupId><artifactId>mingyue-common-job</artifactId></dependency>
</dependencies>

复制代码

Gitee: xxl-job: 一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 - Gitee.com

选择需要的分支,复制 xxl-job-admin 代码到 mingyue-xxl-job-admin 项目

mingyue-xxl-job-admin Nacos 配置

# 任务调度配置
# server 配置
spring:datasource:type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://mingyue-mysql:3306/mingyue_job?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=trueusername: rootpassword: mingyuehikari:auto-commit: trueconnection-test-query: SELECT 1connection-timeout: 10000idle-timeout: 30000max-lifetime: 900000maximum-pool-size: 30minimum-idle: 10pool-name: HikariCPvalidation-timeout: 1000mail:from: xxx@qq.comhost: smtp.qq.comusername: xxx@qq.compassword: xxxport: 25properties:mail:smtp:auth: truesocketFactory:class: javax.net.ssl.SSLSocketFactorystarttls:enable: truerequired: true
​
# mybatis 配置
mybatis:mapper-locations: classpath:/mybatis-mapper/*Mapper.xml
​
# Actuator 监控端点的配置项
management:health:mail:enabled: falseendpoints:web:exposure:include: '*'endpoint:health:show-details: ALWAYSlogfile:external-file: ./logs/${spring.application.name}/console.log
​
# xxljob系统配置
xxl:job:# 鉴权tokenaccessToken: xxl-job# 国际化i18n: zh_CN# 日志清理logretentiondays: 30triggerpool:fast:max: 200slow:max: 100

启动项目

用户名:admin

密码:123456

登录地址:http://mingyue-job:9100/

image-20231026094953102

登陆成功后,可以看到如下页面,并且后台启动日志没有异常信息打印即可!

2023-10-26 09:49:10 [xxl-job, admin JobScheduleHelper#scheduleThread] INFO  c.x.j.a.c.thread.JobScheduleHelper- >>>>>>>>> init xxl-job admin scheduler success.
2023-10-26 09:49:10 [xxl-job, admin JobFailMonitorHelper] INFO  com.zaxxer.hikari.HikariDataSource- HikariCP - Start completed.

mingyue-job

新建模块引入依赖

<dependencies><!-- SpringCloud Alibaba Nacos --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
​<!-- SpringCloud Alibaba Nacos Config --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>
​<!-- web容器 --><dependency><groupId>com.csp.mingyue</groupId><artifactId>mingyue-common-web</artifactId></dependency>
​<!-- 接口文档 --><dependency><groupId>com.csp.mingyue</groupId><artifactId>mingyue-common-doc</artifactId></dependency>
​<!-- 认证工具 --><dependency><groupId>com.csp.mingyue</groupId><artifactId>mingyue-common-security</artifactId></dependency>
​<dependency><groupId>com.csp.mingyue</groupId><artifactId>mingyue-common-mybatis</artifactId></dependency>
​<dependency><groupId>com.csp.mingyue</groupId><artifactId>mingyue-common-job</artifactId></dependency>
</dependencies>

XxlJob开发示例

@Slf4j
@Service
public class SampleService {
​/*** 1、简单任务示例(Bean模式)*/@XxlJob("demoJobHandler")public void demoJobHandler() throws Exception {XxlJobHelper.log("XXL-JOB, Hello World.");
​for (int i = 0; i < 5; i++) {XxlJobHelper.log("beat at:" + i);}// default success}
}

mingyue-job Nacos 配置

# 定时服务配置
spring:datasource:type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://mingyue-mysql:3306/mingyue_job?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=trueusername: rootpassword: mingyue
​
xxl:job:# 执行器开关enabled: true# 调度中心地址:如调度中心集群部署存在多个地址则用逗号分隔。# admin-addresses: http://localhost:9900# 调度中心应用名 通过服务名连接调度中心(启用admin-appname会导致admin-addresses不生效)admin-appName: mingyue-xxl-job-admin# 执行器通讯TOKEN:非空时启用access-token: xxl-job# 执行器配置executor:# 执行器AppName:执行器心跳注册分组依据;为空则关闭自动注册appName: ${spring.application.name}-executor# 29203 端口 随着主应用端口飘逸 避免集群冲突port: 2${server.port}# 执行器注册:默认IP:PORTaddress:# 执行器IP:默认自动获取IPip:# 执行器运行日志文件存储磁盘路径logpath: ./logs/${spring.application.name}/xxl-job# 执行器日志文件保存天数:大于3生效logretentiondays: 30

启动测试

选择 测试任务1执行一次

image-20231026152833772

执行成功后查看执行日志

2023-10-26 15:25:59 [com.xxl.job.core.thread.JobThread#run]-[133]-[xxl-job, JobThread-1-1698305159363] 
----------- xxl-job job execute start -----------
----------- Param:
2023-10-26 15:25:59 [com.csp.mingyue.job.service.SampleService#demoJobHandler]-[36]-[xxl-job, JobThread-1-1698305159363] XXL-JOB, Hello World.
2023-10-26 15:25:59 [com.csp.mingyue.job.service.SampleService#demoJobHandler]-[39]-[xxl-job, JobThread-1-1698305159363] beat at:0
2023-10-26 15:25:59 [com.csp.mingyue.job.service.SampleService#demoJobHandler]-[39]-[xxl-job, JobThread-1-1698305159363] beat at:1
2023-10-26 15:25:59 [com.csp.mingyue.job.service.SampleService#demoJobHandler]-[39]-[xxl-job, JobThread-1-1698305159363] beat at:2
2023-10-26 15:25:59 [com.csp.mingyue.job.service.SampleService#demoJobHandler]-[39]-[xxl-job, JobThread-1-1698305159363] beat at:3
2023-10-26 15:25:59 [com.csp.mingyue.job.service.SampleService#demoJobHandler]-[39]-[xxl-job, JobThread-1-1698305159363] beat at:4
2023-10-26 15:25:59 [com.xxl.job.core.thread.JobThread#run]-[179]-[xxl-job, JobThread-1-1698305159363] 
----------- xxl-job job execute end(finish) -----------
----------- Result: handleCode=200, handleMsg = null
2023-10-26 15:25:59 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] 
----------- xxl-job job callback finish.
​
[Load Log Finish]

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

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

相关文章

自然语言处理(NLP)-spacy简介以及安装指南(语言库zh_core_web_sm)

spacy 简介 spacy 是 Python 自然语言处理软件包&#xff0c;可以对自然语言文本做词性分析、命名实体识别、依赖关系刻画&#xff0c;以及词嵌入向量的计算和可视化等。 1.安装 spacy 使用 “pip install spacy" 报错&#xff0c; 或者安装完 spacy&#xff0c;无法正…

解决Chrome无法自动同步书签

前提&#xff1a;&#xff08;要求能正常访问google&#xff09; 准备一个谷歌账号 安装Chrome浏览器 开启集装箱插件&#xff08;或者其他能访问谷歌的工具&#xff09; 步骤&#xff1a;&#xff08;使用集装箱插件/能正常访问谷歌的其他工具&#xff09; 下载安装使用“集…

activiti7审批驳回,控制变量无法覆盖,导致无限循环驳回,流程无法结束

项目开发过程中使用工作流&#xff0c;因此考虑使用activiti7做完工作流引擎。项目开发过程中&#xff0c;发现流程驳回时&#xff0c;再次执行流程&#xff0c;控制变量无法覆盖&#xff0c;导致无限循环驳回&#xff0c;流程无法结束。流程图如下图所示&#xff1a; 驳回控制…

Eclipse打包Springboot项目

首先&#xff0c;在pom.xml文件中添加配置&#xff0c;修改mainClass主函数&#xff1a; <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configurat…

4+糖酵解+预后模型,结合预后模型为文章加分,思路值得模仿

今天给同学们分享一篇生信文章“A glycolysis-related two-gene risk model that can effectively predict the prognosis of patients with rectal cancer”&#xff0c;这篇文章发表在Hum Genomics期刊上&#xff0c;影响因子为4.5。 结果解读&#xff1a; COAD和READ之间的…

【力扣题:循环队列】

文章目录 一.题目描述二. 思路解析三. 代码实现 一.题目描述 设计你的循环队列实现。 循环队列是一种线性数据结构&#xff0c;其操作表现基于 FIFO&#xff08;先进先出&#xff09;原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 循环队列的一个好…

基于ssm流浪动物救助管理系统

基于ssm流浪动物救助管理系统 摘要 随着城市化的不断发展&#xff0c;流浪动物问题逐渐凸显&#xff0c;而对流浪动物的救助和管理成为社会关注的焦点。本文基于SSM&#xff08;SpringSpringMVCMyBatis&#xff09;框架&#xff0c;设计并实现了一套流浪动物救助管理系统。该系…

excel中用NORM.INV函数计算正态累积分布的逆

NORM.INV函数返回正态累积分布的逆。它的形式为NORM.INV(probability,mean,standard_dev)。 正态累积分布函数和正态概率密度函数互为逆。 参数说明&#xff1a; probability&#xff1a;对应正态分布的累积分布值。例如该值等于0.9&#xff0c;表示累积概率之和是0.9Mean&am…

MacOS Ventura 13 优化配置(ARM架构新手向导)

一、系统配置 1、About My MacBook Pro 2、在当前标签打开新窗口 桌面上创建目录的文件夹&#xff0c;每次新打开一个目录&#xff0c;就会创建一个窗口&#xff0c;这就造成窗口太多&#xff0c;不太好查看和管理&#xff0c;我们可以改成在新标签处打开新目录。需要在&…

【华为内部资料】《高速数字电路设计教材》(可下载)

与数字技术或软件相比&#xff0c;模拟技术人才的培养和造就仍然需要一定的实践和时间&#xff0c;但无论数字技术发展到任何阶段将永远离不开模拟技术。 由于难度系数较大的原因&#xff0c;有时即便投入很多精力&#xff0c;如果缺乏耐心、毅力和必要的条件&#xff0c;投入…

Ubuntu20.04配置深度学习环境

默认你已经完成Ubuntu20.04的安装&#xff0c;如果没安装的话可以参考其他博客&#xff0c;我的显卡是GTX1660Ti 一、NVIDIA显卡驱动安装 大多数人在安装Ubutnu20.04系统的时候为了节约时间&#xff0c;通常不会勾选“图形或无线硬件&#xff0c;以及其他媒体格式安装第三方软…

Postman配置环境请求接口

一、准备配置dev、test、demo、eprod 二、使用切换环境变量调用接口 三、使用登录接口自动获取token

仿京东拼多多商品分类页-(RecyclerView悬浮头部实现、xml绘制ItemDecoration)

文章目录 前言效果图思路方式一&#xff1a;通过xml布局来实现方式二&#xff1a;通过ItemDecoration方式来实现 实现步骤1、数据项格式2、左侧列表适配器3、右侧列表适配器4、头部及悬浮头部绘制4.1头部偏移高度为要绘制xml布局的高度--getItemOffsets()4.2 绘制固定头部--onD…

MAT工具定位分析Java堆内存泄漏问题方法

原创/朱季谦 一、MAT概述与安装 MAT&#xff0c;全称Memory Analysis Tools&#xff0c;是一款分析Java堆内存的工具&#xff0c;可以快速定位到堆内泄漏问题。该工具提供了两种使用方式&#xff0c;一种是插件版&#xff0c;可以安装到Eclipse使用&#xff0c;另一种是独立版…

【python 生成器 面试必备】yield关键字,协程必知必会系列文章--自己控制程序调度,体验做上帝的感觉 1

python生成器系列文章目录 第一章 yield — Python (Part I) 文章目录 python生成器系列文章目录前言1. Generator Function 生成器函数2.并发和并行&#xff0c;抢占式和协作式2.Let’s implement Producer/Consumer pattern using subroutine: 生成器的状态 generator’s st…

ESP32网络开发实例-BME280传感器数据保存到InfluxDB时序数据库

BME280传感器数据保存到InfluxDB时序数据库 文章目录 BME280传感器数据保存到InfluxDB时序数据库1、BM280和InfluxDB介绍2、软件准备3、硬件准备4、代码实现在本文中,将详细介绍如何将BME280传感器数据上传到InfluxDB中,方便后期数据处理。 1、BM280和InfluxDB介绍 InfluxDB…

tracert命令

前言&#xff1a;今天在阅读“Web性能权威指南”这本书的时候&#xff0c;发现 tracert 这个命令挺有意思的&#xff0c;在分析网络性能瓶颈的时候也能使用的到&#xff0c;在此就小记一笔以备后用。 1&#xff1a;作用 tracert 是一个简单的网络诊断工具&#xff0c;可以列出…

如何在Windows 10中进行屏幕截图

本文介绍如何在Windows 10中捕获屏幕截图&#xff0c;包括使用键盘组合、使用Snipping Tool、Snipp&Sketch Tool或Windows游戏栏。 使用打印屏幕在Windows 10中捕获屏幕截图 在Windows 10中捕获屏幕截图的最简单方法是按下键盘上的PrtScWindows键盘组合。你将看到屏幕短暂…

python自动化第一篇—— 带图文的execl的自动化合并

简述 最近接到一个需求&#xff0c;需要为公司里的一个部门提供一个文件上传自动化合并的系统&#xff0c;以供用户稽核&#xff0c;谈到自动化&#xff0c;肯定是选择python&#xff0c;毕竟python的轮子多。比较了市面上几个用得多的python库&#xff0c;我最终选择了xlwings…

将按键放到输入框内:

如何将将Button放到输入框内&#xff1f; 效果图&#xff1a; 步骤如下&#xff1a; button 外围用template 包裹一层 <template #suffix v-if"row.WorkerRole TPM"> <el-inputtype"text"v-model"row.JobNumber"placeholder"…