使用xxl-job-executor-go 接入xxl-job实现定时任务调度

定时任务是软件开发中很常见的一种处理业务的机制,xxl-job是近些年比较火的定时任务调用组件,其采用java 实现,是一个高可用,分布式调用的组件,还支持多种定时任务有关的特性,不仅能轻易的用java 客户端接入,还提供了rest-api 供非java语言的客户端接入。
在这里插入图片描述

1.xxl-job-executor-go 就是go实现了 xxl-job执行器相关协议

1.1用法

从xxl-job的git仓库拉取xxl-job源码
https://github.com/xuxueli/xxl-job/

从doc 下获取初始的xxl-job数据库的脚本,并执行
在这里插入图片描述
修改xxl-job-admin相关数据库配置,如账号密码等,其他xxl-job-admin,也可以以docker启动,官方提供了镜像。

启动完访问xxl-job-admin控制台,账号密码admin/123456
在这里插入图片描述

1.2 配置新的执行器

在这里插入图片描述
Appname:要求唯一,需要和客户端的执行器配置保持一致,
注册方式:可以选择或手动,自动的话,客户端启动后会将本机执行器的地址注册到xxl-job中(多网卡可能会存在一定问题,可以换成说手动),

1.3 xxl-job 调度中心集群启动

xxl-job能启动多个实例,只需要连接到同一个db,同时保证时针同步,在多个xxl-job-admin的实例上加一层反向代理,如使用nginx。

3.在go项目中引入xxl-job-executor-go

go get github.com/xxl-job/xxl-job-executor-go
func xxl_job() {exec := xxl.NewExecutor(xxl.ServerAddr("http://127.0.0.1:8080/xxl-job-admin"), // xxl-job控制台地址xxl.AccessToken("default_token"), //请求令牌(默认为空)xxl.ExecutorIp("127.0.0.1"),      //可自动获取xxl.ExecutorPort("9999"),         //默认9999(非必填)xxl.RegistryKey("golang-jobs"),   //执行器名称,和后台新建的执行器的appName保持一致xxl.SetLogger(&logger{}),         //自定义日志)exec.Init()exec.Use(customMiddleware)//设置日志查看handlerexec.LogHandler(customLogHandle)//注册任务handlerexec.RegTask("task.test", task.Test) //regtask的第一个参数对应xxl-job-admin控制台的任务的jobhandlerexec.RegTask("task.test2", task.Test2)exec.RegTask("task.panic", task.Panic)log.Fatal(exec.Run())
}// 自定义日志处理器
func customLogHandle(req *xxl.LogReq) *xxl.LogRes {return &xxl.LogRes{Code: xxl.SuccessCode, Msg: "", Content: xxl.LogResContent{FromLineNum: req.FromLineNum,ToLineNum:   2,LogContent:  "这个是自定义日志handler",IsEnd:       true,}}
}// xxl.Logger接口实现
type logger struct{}func (l *logger) Info(format string, a ...interface{}) {fmt.Println(fmt.Sprintf("自定义日志 - "+format, a...))
}func (l *logger) Error(format string, a ...interface{}) {log.Println(fmt.Sprintf("自定义日志 - "+format, a...))
}// 自定义中间件
func customMiddleware(tf xxl.TaskFunc) xxl.TaskFunc {return func(cxt context.Context, param *xxl.RunReq) string {log.Println("I am a middleware start")res := tf(cxt, param)log.Println("I am a middleware end")return res}
}```
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/c4908e06b3d648fc9d2cbe595b78f4d0.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/d310fae029b4477488718cbd5a3ae575.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/8e29b176aafe4116901f8c7050830b53.png)
可以在后台查看调度结果
[http://www.xuxueli.com/xxl-job/](http://www.xuxueli.com/xxl-job/)

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

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

相关文章

SpringBoot高级原理详解

今日内容: 理解SpringBoot自动化配置源码理解SpringBoot健康监控 1 SpringBoot自动化配置原理 01-SpringBoot2高级-starter依赖管理机制 目的:通过依赖能了解SpringBoot管理了哪些starter讲解: 通过依赖 spring-boot-dependencies 搜索 …

【C++】<知识点> 标准模板库STL(上)

文章目录 一、STL---string类 1. 常用构造函数 2. 常用操作 3. 字符串流处理 二、STL---容器 1. STL及基本概念 2. 顺序容器简介 3. 关联容器简介 4. 容器适配器简介 5. 常用成员函数 三、STL---迭代器 1. 普通迭代器 2. 双向、随机访问迭代器 3. 不同容器的迭代器…

数据结构:二叉树与树

一 树的基本概念: 1.树的形状: 2.树的定义: 树是一种非线性的数据结构,它是n(n > 0)个结点的有限集。当n 0时,称为空树。在任意一棵非空树中应满足: 2.1 有且仅有一个特定的称为根的结点。 2.2 当n …

k8s二进制安装与部署

目录 一、实验目的 二、实验环境 三、实验步骤 3.1 操作系统初始化配置 3.2 部署 docker引擎 3.3 部署 etcd 集群 3.3.1 在 master01 节点上操作 ​3.3.2 在 node01 节点上操作 3.3.3 在 node02 节点上操作 3.4 部署 Master 组件 3.4.1 在 mast…

Softing工业推出新品edgeGate:一款用于工业边缘和云应用的硬件网关

2024年4月17日(哈尔),Softing工业自动化在2024年汉诺威工业博览会上首次展示了新品edgeGate。该产品是一个无需维护的硬件物联网网关解决方案,可将生产数据从PLC和数控机床控制器传输至工业边缘及物联网云平台。 (edge…

MiniMax Golang2轮面试,期望薪资25K

一面 1、自我介绍 2、简单介绍一下你们成立了这个finance的财务中台之后,整体的服务架构是怎么样的吗? 3、就你提到的预算池项目,展开说说背景,以及解决了怎么样的问题? 4、为什么采用针对T-1订单的异步计算方案&a…

jmeter线程组(下篇)

线程组 线程组作为JMeter测试计划的核心组件之一,对于模拟并发用户的行为至关重要。线程组元件是整个测试计划的入口,所有的取样器和控制器必须放置在线程组下。 可以将线程组视为一个虚拟用户池,其中每个线程可被理解为一个虚拟用户&#x…

(Java面试题分享)万里长征-03-搜狐

万里长征-03-搜狐 ⚙ 以下内容基于GPT-4o模型 问题 1.LeetCode103 二叉树的锯齿形层序遍历 103. 二叉树的锯齿形层序遍历 - 力扣(LeetCode) 2.LeetCode5 最长回文子串 5. 最长回文子串 - 力扣(LeetCode) 3.Kafka为何那么快 …

初学者都能掌握的操作符(中)

(1)位操作符(& | ^) &:(按二进制位“与”) 也就是两个数的每一位二进制数按照 “与” 的算法,如下: int a 3 ,b 5 ; c a & b; 我们首先写出a和b的二进…

5.23.12 计算机视觉的 Inception 架构

1. 介绍 分类性能的提升往往会转化为各种应用领域中显着的质量提升,深度卷积架构的架构改进可用于提高大多数其他计算机视觉任务的性能,这些任务越来越依赖于高质量的学习视觉特征。在 AlexNet 功能无法与手工设计、制作的解决方案竞争的情况下&#xf…

如何评价刘强东说“业绩不好的人不是我兄弟”

在近日的一次京东管理层会议上,创始人刘强东以不容置疑的口吻表明了对公司文化的坚定态度:“凡是长期业绩不好,从来不拼搏的人,不是我的兄弟。”这句话不仅是对那些工作表现不佳的员工的直接警告,也透露出京东在追求业…

three.js能实现啥效果?看过来,这里都是它的菜(08)

在Three.js中实现旋转动画的原理是通过修改对象的旋转属性来实现的,通常使用渲染循环(render loop)来更新对象的旋转状态,从而实现动画效果。 具体的原理包括以下几个步骤: 创建对象:首先创建一个需要旋转…

AIGC-风格迁移-style Injection in Diffusion-CVPR2024HighLight-论文精度

Style Injection in Diffusion: A Training-free Approach for Adapting Large-scale Diffusion Models for Style Transfer-CVPR2024HighLight 代码:https://github.com/jiwoogit/StyleID 论文:https://jiwoogit.github.io/StyleID_site/ 为了解决风格迁…

你真的会使用Vue3的onMounted钩子函数吗?Vue3中onMounted的用法详解

目录 一、onMounted的前世今生 1.1、onMounted是什么 1.2、onMounted在vue2中的前身 1.2.1、vue2中的onMounted 1.2.2、Vue2与Vue3的onMounted对比 1.3、vue3中onMounted的用法 1.3.1、基础用法 1.3.2、顺序执行异步操作 1.3.3、并行执行多个异步操作 1.3.4、执行一次…

Rust腐蚀怎么用服务器一键开服联机教程

1、进入控制面板 首次登陆需要点击下方重置密码,如何再点击登录面板,点击后会跳转到登录页面,输入用户名和密码登录即可 2、设置游戏端口 由于腐蚀的设置需要三个端口,它们用于游戏端口(必须为首选端口)&a…

FFMPEG 解码过程初步学习

1. 视频文件解码过程 解码过程 步骤如下: 视频文件(封装格式,MP4/FLV/AVI 等)获取视频格式信息等解复用为Stream 流, 准备解码用的Codec将Stream 流 使用解码器解为Raw 格式针 1.1 音视频格式填充: int…

找不到msvcr110.dll无法继续执行代码的原因分析及解决方法

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是找不到msvcr110.dll文件。这个错误通常发生在运行某些程序或游戏时,系统无法找到所需的动态链接库文件。为了解决这个问题,下面我将介绍5种常见的解决方法。 一&#…

Vue3实现上传照片以及回显

Vue3实现上传照片以及回显 一、安装Element Plus二、案例1、基本示例 三、进阶案例1、代码2、代码解释1、上传接口展示2、查询接口展示组件属性 3、效果展示 一、安装Element Plus 使用 Element Plus 组件库来实现上传照片和回显同样很简单,你可以按照以下步骤进行…

用栈实现队列(C语言)

目录 题目题目分析 代码栈的实现结构体。栈的初始化栈的销毁 入栈删除查找顶部数据判空 答案结构体初始化插入数据删除数据获取队列开头元素判空销毁栈 题目 题目分析 链接: 题目 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、po…

pyside6下没有designer.exe、pyside6-uic.exe等

使用conda安装的pyside6(conda install pyside6),发现pyside6目录下没有designer.exe、pyside6-uic.exe等;designer.exe在Miniconda3/Library/bin下 pyside6-uic.exe、pyside6-rcc.exe在Miniconda3\Scripts下 但是 使用pip安装…