XXL-Job集群

本文介绍了在XXL-Job中配置执行器集群的步骤和原因,探讨了执行器与具体项目分离的优缺点,以及在实践中遇到的回调问题和解决方案。在集群配置中,关键点包括执行器自动寻找宿主机IP、调度中心的自动注册和正确设置appName。任务执行的回调问题可能由于调度中心地址配置不正确导致。实际操作中,会遇到更多问题,但通过深入分析,都能找到解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

* 背景

       上篇博文讲述了如何使用XXL-Job,今天我们的讨论的是在此基础上的,更多的信息,请参看https://blog.youkuaiyun.com/SweetyoYY/article/details/81437149


* 使用心得

       最开始我入手xxl-job,晓得他有两部分,调度中心和控制器。那是我想的是将调度中心和控制器分离这种想法还是可行,不过下一步的想法便有些不合理,那就是将执行器和我们具体的项目分离。

       如果执行器和我们具体的项目分离,会面对两个问题。人力:如果定时器由专门的人来负责,其实他是不必要关注具体的业务的,他也不知道哪个接口需要定时执行。但是分离之后,耦合性太强,也不符合单一职责。物力:分离之后,很直观的一个问题,便是远程的调用的问题,我们应该如何进行服务间的调用,dubbo是一套,spring boot是一套,我们是不是无形中有增加了工作量。

       最终将执行器加入项目中,我们通过引入pom中依赖,来达成,这样做业务的可以将要定时执行的接口“标记”一下,我们在调动中心调度即可。还是要感谢项目中的使用,不然自己犹如井底之蛙,同时又有一句话可以形容我的心情,百无一用是书生。


* 加入集群

       为什么我们要使用集群呢?说一说我们的项目,我们的执行器配置数量为2个,每个执行器中的任务有8,9个。其实这样的数量不算多,通过查看具体的任务,我发现一件事情,便是任务的执行时间比较频繁,这样对于执行器所在的服务器而言压力比较多,cpu占用过高。如果我们的服务器一旦宕机,那么造成项目的崩溃,于是我们将采取的方式是执行器集群。

这里写图片描述

       接下来说一下如何配置执行器的集群:

       1.在xxl-job-executor.properties中,配置执行器ip时我们不进行ip的配置,使其为空,当其为空时,执行器便会自动寻找宿主机的ip。

       2.调度中心新增执行器时,注册方式选择自动,这是的appName一定要跟xxl-job-executor.properties配置一直,这是调度中心可以访问到执行器的关键。

这里写图片描述

       3.任务的轮询方式也不在单一了,我们可以使用轮询,忙碌转移,故障转移等方式。

这里写图片描述


* 遇到的问题

       任务在执行的过程中,一直处于执行的状态,不能自动中完成,必须要手动的终止任务,如下:

这里写图片描述

       出现这种情况是因为,调度中心成功的完成的调度,跟执行器单方面的交互成功,但是任务执行完成后,回调是并没有找到调度中心。这样的问题是执行器配置中结果回调的地址有问题,看看调度中心的地址是xxl.job.admin.addresses=http://127.0.0.1:8080还是xxl.job.admin.addresses=http://127.0.0.1:8080 /xxl-job-admin


* 结语

       在项目上线后我们能发现更多的问题,比我们臆想的问题要多一些同时也要意外一些。解决之后回头想想,也不是那样的意外与棘手,如果我们从根源上去发现,便可以搞定了。

       感谢您宝贵的阅读时间。

### Xxl-Job 集群部署与配置 #### 一、集群环境概述 Xxl-Job 是一款强大的分布式任务调度平台,支持高可用性和负载均衡功能,在集群环境下可以实现任务的高效分发和执行。为了确保系统的稳定运行以及扩展能力,通常会在多台服务器上部署多个实例来组成集群。 在集群环境中,Xxl-Job 的核心组件分为两部分:管理端(Admin)和服务端(Executor)。以下是具体的部署方式: --- #### 二、管理端(Admin)的集群化部署 1. **镜像拉取** 使用 Docker 容器技术简化部署流程,通过官方提供的镜像快速启动 Admin 实例。 ```bash docker pull xuxueli/xxl-job-admin:latest ``` 建议指定具体版本号以保证稳定性[^3]。 2. **容器编排** 利用 Kubernetes 或 Docker Compose 编排工具创建多个 Admin 节点,并设置反向代理(Nginx/LVS/Haproxy),对外提供统一访问入口。 示例 `docker-compose.yml` 文件如下: ```yaml version: '3' services: xxl-job-admin-1: image: xuxueli/xxl-job-admin:v2.3.0 ports: - "8080:8080" environment: - XXL_JOB_ADMIN_ACCESS_TOKEN=your_token_here - SPRING_DATASOURCE_URL=jdbc:mysql://mysql-host:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai xxl-job-admin-2: image: xuxueli/xxl-job-admin:v2.3.0 ports: - "8090:8080" environment: - XXL_JOB_ADMIN_ACCESS_TOKEN=your_token_here - SPRING_DATASOURCE_URL=jdbc:mysql://mysql-host:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai ``` 3. **数据库共享** 所有 Admin 节点需连接到同一个 MySQL 数据库实例,用于存储任务定义、日志记录以及其他元数据信息。这一步骤至关重要,因为它是实现状态同步的基础[^1]。 4. **Session 共享机制** 如果启用了 Web 控制台的功能,则需要解决 Session 同步问题。可以通过 Redis 或其他缓存中间件完成跨节点间的会话保持。 --- #### 三、服务端(Executor)的集群化部署 1. **注册中心集成** Executor 节点负责实际的任务处理工作,它们必须能够动态地向 Admin 注册自己并接收指令。推荐采用 Zookeeper/Kubernetes Etcd 等作为注册发现的服务提供商[^2]。 2. **应用打包** 将自定义开发好的业务逻辑封装成独立的应用程序包(Spring Boot/Jar 形式),上传至目标机器或者引入 CI/CD 流程自动化发布过程。 3. **水平扩容** 当单个 Executor 处理不过来的请求量时,只需增加新的实例即可轻松应对压力增长情况;注意调整线程池大小参数适应硬件资源条件变化需求。 4. **健康检测** 设置心跳监测频率及时剔除异常掉线成员保障整体服务质量不受影响。 --- #### 四、注意事项 - **网络连通性** 确保各子网之间无障碍通信以便正常交互消息传递。 - **权限控制** 对敏感接口实施严格的认证授权策略防止未授权访问行为发生危害系统安全。 - **监控告警体系构建** 结合 Prometheus/Grafana 工具链搭建全方位性能指标跟踪展示面板辅助运维人员快速定位潜在风险隐患所在位置。 --- ```python # Python 示例代码片段演示如何调用 REST API 接口触发远程作业执行命令 import requests url = "http://admin-node-address/jobinfo/run" payload = { "jobId": 1, "executorHandler": "demoJobHandler", "executorParams": "", "executorBlockStrategy": "SERIAL_EXECUTION", "glueType": "BEAN", "timeout": None, "failRetryCount": 0 } headers = {'Content-Type': 'application/json'} response = requests.post(url, json=payload, headers=headers) print(response.text) ``` ---
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值