Vue中如何进行分布式任务调度与定时任务管理

在Vue中进行分布式任务调度与定时任务管理

分布式任务调度和定时任务管理是许多应用程序中的关键功能之一。它们用于执行周期性的、异步的、重复的任务,例如数据备份、邮件发送、定时报告生成等。在Vue.js应用中,我们可以结合后端服务实现分布式任务调度和定时任务管理,以提高应用程序的可靠性和效率。本文将介绍如何在Vue中进行分布式任务调度与定时任务管理,并提供相关代码示例。

在这里插入图片描述

准备工作

在开始之前,请确保您已经安装了Node.js和Vue CLI。如果尚未安装,您可以按照Vue CLI官方文档的说明进行安装。

# 安装Vue CLI
npm install -g @vue/cli

此外,我们将使用Redis作为任务队列来存储和管理任务,因此您需要安装并启动Redis服务器。您可以从Redis官网下载和安装Redis。

创建Vue项目

首先,让我们创建一个新的Vue项目。在终端中执行以下命令:

vue create task-scheduler-app

在项目创建过程中,您可以选择自定义配置或使用默认配置,具体根据您的需求来选择。创建完成后,进入项目目录:

cd task-scheduler-app

安装后端服务

为了实现分布式任务调度和定时任务管理,我们需要一个后端服务来处理任务的存储和调度。在这里,我们将使用Node.js和Express来创建一个简单的后端服务。

首先,在项目根目录中创建一个名为server的文件夹,并在其中创建一个名为app.js的文件:

mkdir server
touch server/app.js

然后,使用以下代码创建后端服务:

// server/app.js
const express = require('express');
const redis = require('redis');
const { promisify } = require('util');
const cors = require('cors');const app = express();
const port = process.env.PORT || 3000;
const client = redis.createClient();const getAsync = promisify(client.get).bind(client);
const zrangeAsync = promisify(client.zrange).bind(client);app.use(cors());
app.use(express.json());app.post('/schedule', async (req, res) => {const { taskId, scheduleTime } = req.body;const currentTime = Date.now();if (scheduleTime <= currentTime) {return res.status(400).json({ message: 'Invalid schedule time' });}await client.zadd('tasks', scheduleTime, taskId);return res.json({ message: 'Task scheduled' });
});app.get('/tasks', async (req, res) => {const currentTime = Date.now();const taskIds = await zrangeAsync('tasks', 0, -1);const tasks = await Promise.all(taskIds.map(async (taskId) => {const scheduleTime = await getAsync(taskId);return { taskId, scheduleTime };}));res.json(tasks.filter((task) => task.scheduleTime > currentTime));
});app.listen(port, () => {console.log(`Server is running on port ${port}`);
});

上述代码创建了一个简单的Express应用,它提供了两个API端点:

  1. POST /schedule:用于将任务安排到指定的时间。
  2. GET /tasks:用于获取当前待执行的任务列表。

该应用还使用了Redis来存储任务和其计划执行时间。

创建任务调度器组件

现在,让我们创建一个名为TaskScheduler.vue的Vue组件,该组件用于调度任务并显示任务列表。

<template><div><h1>任务调度器</h1><div><label for="taskId">任务 ID:</label><input type="text" id="taskId" v-model="taskId" /></div><div><label for="scheduleTime">计划时间:</label><input type="datetime-local" id="scheduleTime" v-model="scheduleTime" /></div><button @click="scheduleTask">调度任务</button><h2>待执行任务列表</h2><ul><li v-for="task in tasks" :key="task.taskId"><span>ID: {{ task.taskId }}</span><span>计划时间: {{ new Date(task.scheduleTime).toLocaleString() }}</span></li></ul></div>
</template><script>
export default {data() {return {taskId: '',scheduleTime: '',tasks: [],};},methods: {async scheduleTask() {try {const response = await fetch('http://localhost:3000/schedule', {method: 'POST',headers: {'Content-Type': 'application/json',},body: JSON.stringify({taskId: this.taskId,scheduleTime: new Date(this.scheduleTime).getTime(),}),});if (response.ok) {this.taskId = '';this.scheduleTime = '';this.fetchTasks();} else {const data = await response.json();console.error(data.message);}} catch (error) {console.error('调度任务失败:', error);}},async fetchTasks() {try {const response = await fetch('http://localhost:3000/tasks');if (response.ok) {this.tasks = await response.json();}} catch (error) {console.error('获取任务列表失败:', error);}},},created() {this.fetchTasks();},
};
</script>

上述代码创建了一个名为TaskScheduler.vue的Vue组件,该组件包括以下功能:

  • 输入任务ID和计划时间,并通过按钮点击将任务调度到指定时间。
  • 显示当前待执行的任务列表。

集成组件

最后,我们需要将TaskScheduler.vue组件

集成到我们的Vue应用中。打开src/App.vue文件,并在其中添加以下代码:

<template><div id="app"><TaskScheduler /></div>
</template><script>
import TaskScheduler from './components/TaskScheduler.vue';export default {name: 'App',components: {TaskScheduler,},
};
</script>

这样,我们的任务调度器组件就被添加到了Vue应用的根组件中。

运行应用程序

现在,我们可以运行应用程序并查看任务调度与定时任务管理功能。在项目根目录中执行以下命令:

npm run serve

打开浏览器并访问http://localhost:8080,您将看到一个简单的任务调度器界面,您可以输入任务ID和计划时间,然后点击按钮将任务调度到指定时间。待执行的任务列表将显示在页面上。

进一步探索

这只是一个简单的分布式任务调度和定时任务管理示例,您可以根据您的需求扩展和改进它。例如,您可以添加任务执行、任务取消、任务重试等功能,以满足不同应用场景的需求。

总结

在Vue.js中进行分布式任务调度与定时任务管理是一个重要的功能,它可以使您的应用程序更加可靠和高效。通过结合Vue.js前端和Node.js后端,以及使用Redis作为任务队列,我们已经成功地创建了一个简单的任务调度器示例。希望本文对您有所帮助,并激发了您在Vue应用中探索任务调度与定时任务管理的兴趣。如果您有任何问题或需要进一步的帮助,请随时提问。

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

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

相关文章

关于氮化镓的干蚀刻综述

引言 GaN及相关合金可用于制造蓝色/绿色/紫外线发射器以及高温、高功率电子器件。由于 III 族氮化物的湿法化学蚀刻结果有限&#xff0c;因此人们投入了大量精力来开发干法蚀刻工艺。干法蚀刻开发一开始集中于台面结构&#xff0c;其中需要高蚀刻速率、各向异性轮廓、光滑侧壁…

记一次 .NET某账本软件 非托管泄露分析

一&#xff1a;背景 1. 讲故事 中秋国庆长假结束&#xff0c;哈哈&#xff0c;在老家拍了很多的短视频&#xff0c;有兴趣的可以上B站观看&#xff1a;https://space.bilibili.com/409524162 &#xff0c;今天继续给大家分享各种奇奇怪怪的.NET生产事故&#xff0c;希望能帮助…

Java基础(二)

1. 面向对象基础 1.1 面向对象和面向过程的区别 面向过程把解决问题的过程拆成一个个方法&#xff0c;通过一个个方法的执行解决问题。面向对象会先抽象出对象&#xff0c;然后用对象执行方法的方式解决问题。 面向对象开发的方式更容易维护和迭代升级、易复用、易扩展。 1…

3D孪生场景搭建:参数化模型

1、什么是参数化模型 参数化模型是指通过一组参数来定义其形状和特征的数学模型或几何模型。这些参数可以用于控制模型的大小、形状、比例、位置、旋转、曲率等属性&#xff0c;从而实现对模型进行灵活的调整和变形。 在计算机图形学和三维建模领域&#xff0c;常见的参数化模…

Docker 镜像的缓存特性

Author&#xff1a;rab 目录 前言一、构建缓存二、Pull 缓存总结 前言 首先我们要清楚&#xff0c;Docker 的镜像结构是分层的&#xff0c;镜像本身是只读的&#xff08;不管任何一层&#xff09;&#xff0c;当我们基于某镜像运行一个容器时&#xff0c;会有一个新的可写层被…

Springboot 音乐网站管理系统idea开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot 音乐网站管理系统是一套完善的信息系统&#xff0c;结合springboot框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统 具有完整的源代码和数据库&…

让丢失成为过去,尽在我们的智能防丢器

我们都知道&#xff0c;生活中总会遇到一些小烦恼&#xff0c;比如钥匙不见了&#xff0c;钱包忘在哪里&#xff0c;甚至手机掉在了不知名的地方&#xff0c;这些看似小事&#xff0c;却足以打乱我们的日程。那么&#xff0c;有没有一种方法&#xff0c;可以让这些烦恼一扫而空…

一座“城池”:泡泡玛特主题乐园背后,IP梦想照亮现实

“更适合中国宝宝体质”的主题乐园&#xff0c;被泡泡玛特造出来了。 9月26日&#xff0c;位于北京朝阳公园内的国内首个潮玩行业沉浸式 IP 主题乐园&#xff0c;也是泡泡玛特首个线下乐园——泡泡玛特城市乐园 POP LAND正式开园。 约4万平方米的空间中&#xff0c;泡泡玛特使…

Javascript - 轮播图

轮播图也称banner图、广告图、焦点图、滑片。是指在一个模块或者窗口,通过鼠标点击或手指滑动后,可以看到多张图片。这些图片统称为轮播图,这个模块叫做轮播模块。可以通过运用 javascript去实现定时自动转换图片。以下通过一个小Demo演示如何运用Javascript实现。 <!DOCTYP…

winform中DevExpress控件一些属性

1.DevExpress控件bar去掉前面四点和后面的倒三角。 如图。设置bar属性optionsBar→allowQuickCustomizationFALSE

练[WUSTCTF2020]朴实无华

[WUSTCTF2020]朴实无华 文章目录 [WUSTCTF2020]朴实无华掌握知识解题思路代码分析 关键paylaod 掌握知识 ​ 目录扫描&#xff0c;抓包放包&#xff0c;代码审计&#xff0c;php函数特性的了解&#xff1a;intval函数&#xff0c;md5特性绕过&#xff0c;RCE一些bypass方法 解…

测试老鸟总结,Jmeter接口测试实例-签名接口,一文彻底打通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、签名规则 1&a…

3分钟带你认识腾讯云服务器CVM_一看就懂

腾讯云服务器CVM提供安全可靠的弹性计算服务&#xff0c;腾讯云明星级云服务器&#xff0c;弹性计算实时扩展或缩减计算资源&#xff0c;支持包年包月、按量计费和竞价实例计费模式&#xff0c;CVM提供多种CPU、内存、硬盘和带宽可以灵活调整的实例规格&#xff0c;提供9个9的数…

多个excel合并

目的&#xff1a;将同一个文件下的多个 “京东差评.xlsx” 合并为一个&#xff1a;“京东汇总.xlsx" 代码如下&#xff1a; # -*- coding: utf-8 -*- """ Created on Wed Oct 4 12:52:32 2023author: 64884 """import pandas as pd impor…

开发工具:推荐几款非常漂亮的VScode主题

目录 Atom One Dark Theme Github Theme Night Owl Theme Night Owl JellyFish Theme Sublime Material Theme 深色 浅色 今天给大家推荐几款非常漂亮的VScode主题&#xff0c;值得收藏&#xff01; Atom One Dark Theme 它是市场上最好的深色主题之一。Atom 标志性的…

前端笔试题总结,带答案和解析(二)

前端笔试题总结&#xff0c;带答案和解析&#xff08;二&#xff09; 这个系列将持续更新前端笔试题一期十题&#xff0c;每五题做一个标题&#xff08;方便跳转&#xff09;&#xff0c;您可以一期一期阅读&#xff0c;也可以在点击汇总&#xff0c;一口气看完&#xff0c;如果…

C/C++学习 -- SHA-256算法

SHA-256算法概述 SHA-256代表"Secure Hash Algorithm 256-bit"&#xff0c;是一种安全的哈希算法&#xff0c;输出固定长度的256位&#xff08;32字节&#xff09;哈希值。SHA-256被广泛用于加密、数字签名、密码学以及区块链等领域&#xff0c;因为它提供了高度的安…

详解Python的装饰器(多层语法糖、装饰器和装饰器修复技术及递归函数)

python中的装饰器(decorator)一般采用语法糖的形式&#xff0c;是一种语法格式。比如&#xff1a;classmethod&#xff0c;staticmethod&#xff0c;property&#xff0c;xxx.setter&#xff0c;wraps()&#xff0c;func_name等都是python中的装饰器。 装饰器&#xff0c;装饰的…

pytorch_神经网络构建2(数学原理)

文章目录 深层神经网络多分类深层网络反向传播算法优化算法动量算法Adam 算法 深层神经网络 分类基础理论: 交叉熵是信息论中用来衡量两个分布相似性的一种量化方式 之前讲述二分类的loss函数时我们使用公式-(y*log(y_)(1-y)*log(1-y_)进行概率计算 y表示真实值,y_表示预测值 …

【Pinia】小菠萝详细使用说明

文章目录 1. 介绍1.1 Pinia介绍1.2 pinia的属性说明 2. 安装3. 初步使用4. store具体使用4.1 值修改4.2.1 直接修改4.2.2 通过$patch整体修改4.2.3 通过$patch函数式4.2.4 通过$state整体修改4.2.5 通过actions修改 4.2 解构store 5 actions使用6. getters使用6.1 通过this获取…