改造xxl-job适配nacos注册中心

news2024/10/5 14:52:15

xxl-job并没有对nacos、zookeeper这一类注册中心进行适配,所以需要进行改造。

改造目标

1.对调度器,需要能注册到nacos上,并且执行器管理里的 机器地址 能使用 lb://serviceName 这种地址

2.对执行器,需要能注册到nacos上,对9999端口进行拦截,让其使用server.port的地址。

注意:nacos能兼做注册中心和配置中心,这里不改造配置中心的功能。

一、改造调度器

1.下载2.4.0源码,Release XXL-JOB v2.4.0,分布式任务调度平台 · xuxueli/xxl-job · GitHub

下载后使用idea打开,是一个多模块的maven项目,找到xxl-job-admin

2.加依赖,需要加springboot版本对应的依赖

<!-- 启用 nacos 服务发现 -->
		<!-- 版本对应2.7.9对应 2021.0.x  https://spring.io/projects/spring-cloud#overview -->
		<!-- 2021.0.4.0 对应nacos client 版本 2.0.4 -->
		<dependency>
			<groupId>com.alibaba.cloud</groupId>
			<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
			<version>2021.0.4.0</version>
		</dependency>

		<!-- 如果要启用配置中心,则引入 spring-cloud-starter-alibaba-nacos-config 和 spring-cloud-starter-bootstrap -->

boot和cloud版本对应关系可以查Spring Cloud

2.加配置

spring.cloud.nacos.discovery.server-addr=localhost:8848
spring.application.name=xxl-job-admin

3.写代码

这里代码主要用于改造识别执行器的地址,这要就不用再找执行器的ip了,填写serviceName就可以了。

找到com.xxl.job.admin.core.model.XxlJobGroup#getRegistryList 方法

改写成

public List<String> getRegistryList() {
        if (addressList!=null && addressList.trim().length()>0) {
            String newAddressList = addressList;
            // address 执行器管理填入的机器地址 http://ip:port 这里自定义兼容 lb://servicename地址
            if(addressList.startsWith("lb:")){
                String serviceName =addressList.replace("lb://","");
                DiscoveryClient discoveryClient = SpringContextUtil.getBean(DiscoveryClient.class);
                List<ServiceInstance> instances = discoveryClient.getInstances(serviceName);
                List<String> uriList = instances.stream().map(a -> a.getUri().toString()).collect(Collectors.toList());
                newAddressList = StringUtils.join(uriList, ",");
            }
            registryList = new ArrayList<String>(Arrays.asList(newAddressList.split(",")));
        }
        return registryList;
    }

这里用到了工具类SpringContextUtil 

package com.xxl.job.admin.util;

import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

@Component
public class SpringContextUtil implements ApplicationContextAware {
    private static ApplicationContext applicationContext;

    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    // 下面的这个方法上加了@Override注解,原因是继承ApplicationContextAware接口是必须实现的方法
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) {
        SpringContextUtil.applicationContext = applicationContext;
    }

    public static Object getBean(String name) {
        return applicationContext.getBean(name);
    }

    public static Object getBean(String name, Class<?> requiredType) {

        return applicationContext.getBean(name, requiredType);
    }

    public static <T> T getBean(Class<T> clazz) {
        return applicationContext.getBean(clazz);
    }

    public static boolean containsBean(String name) {
        return applicationContext.containsBean(name);
    }

    public static boolean isSingleton(String name) {
        return applicationContext.isSingleton(name);
    }

    public static Class<?> getType(String name) {
        return applicationContext.getType(name);
    }

    public static String[] getAliases(String name) {
        return applicationContext.getAliases(name);
    }
}

改造完成后,执行器地址填写如下

二、改造执行器

这里借助一个项目justtoplay/xxl-job-plus,项目地址:xxl-job-plus: xxl-job-plus是xxl-job的增强包,提供对接注册中心能力,支持nacos,springboot,spring cloud,支持监测注册中心xxl-job-admin服务上下线,executor服务上下线,实现executor向xxl-job-admin自动启动、刷新、停止,完美兼容xxl-job-admin

下面是改造spring-boot项目示例,spring-cloud项目改造同理

1.加依赖

这里加xxl-job-plus和boot版nacos依赖

        <!-- xxl-job-core -->
        <dependency>
            <groupId>com.xuxueli</groupId>
            <artifactId>xxl-job-core</artifactId>
            <version>2.4.0</version>
        </dependency>

        <!-- 2.3.1 理论上xxl-job-core的版本也要是2.3.1 实测支持2.4.0 -->
        <!-- 2.3.1 对应 nacos client 版本1.x -->
        <!-- 2.3.1-nacos2 对应 nacos client 版本2.x -->
        <dependency>
            <groupId>com.justtoplay</groupId>
            <artifactId>xxl-job-plus</artifactId>
            <version>2.3.1-nacos2</version>
        </dependency>

        <!-- starter 0.2.12 对应nacos client 版本2.1.0  -->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>nacos-discovery-spring-boot-starter</artifactId>
            <version>0.2.12</version>
        </dependency>

2.加配置

原配置下的xxl.job删掉,配置改成xxl.job.plus下的配置,addresses和executor.port不用配了

增加nacos.discovery.server-addr配置和spring.application.name配置

改造前

server: 
  port: 8081
logging: 
  config: classpath:logback.xml
xxl: 
  job: 
    admin: 
      addresses: http://127.0.0.1:8080/xxl-job-admin
    accessToken: xxl_token
    executor: 
      appname: xxl-job-demo
      address: ''
      ip: ''
      port: 9999
      logpath: /data/applogs/xxl-job/jobhandler
      logretentiondays: 30

改造后

server: 
  port: 8082
logging: 
  config: classpath:logback.xml
xxl: 
  job:
    plus:
      admin:
        access-token: default_token
        service-name: xxl-job-admin
      executor:
        service-name:
nacos:
  discovery:
    server-addr: 127.0.0.1:8848
    auto-register: true

spring:
  application:
    name: xxl-job-demo

3.写代码

原来的jobhander不用动,删掉配置类XxlJobConfig,否则会和plus的配置类冲突。

三、改造结果

nacos可以看到这两个服务

服务调用正常,启动多个同服务执行器,无需修改机器地址也能正常调用

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

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

相关文章

激活MacBook的时候有个“文件保险箱磁盘加密“的选项,要不要开启

背景 在激活MacBook的时候&#xff0c;如果填了Apple ID&#xff0c;就会有 “文件保险箱磁盘加密” 的选项&#xff0c;到底是开还是不开呢&#xff1f; 注意&#xff0c;如果激活时跳过Apple ID&#xff0c;则没这选项&#xff0c;可以后续在 “设置->安全性和隐私->文…

天鹰340亿(AquilaChat2-34B-16K)本地部署的解决方案

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

用WordCloud绘制词云

文章目录 初步认识基本参数掩模参数 初步认识 wordcloud是词云绘图模块&#xff0c;封装了WordCloud词云类&#xff0c;是词云的基本载体。在新建一个词云之后&#xff0c;通过generate装载用以生成词云的字符串&#xff0c;最后用to_file把词云图保存到文件中&#xff0c;例如…

TechSmith Camtasia Studio 23.3.2.49471 Crack

全新的Camtasia 2023.2 Camtasia Studio是专业的屏幕录像和视频编辑的软件套装。软件提供了强大的屏幕录像&#xff08;Camtasia Recorder&#xff09;、视频的剪辑和编辑&#xff08;Camtasia Studio&#xff09;、视频菜单制作&#xff08;Camtasia MenuMaker&#xff09;、视…

基于沙猫群优化的BP神经网络(分类应用) - 附代码

基于沙猫群优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于沙猫群优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.沙猫群优化BP神经网络3.1 BP神经网络参数设置3.2 沙猫群算法应用 4.测试结果&#x…

Linux常用命令——cmp命令

在线Linux命令查询工具 cmp 比较两个文件是否有差异 补充说明 cmp命令用来比较两个文件是否有差异。当相互比较的两个文件完全一样时&#xff0c;则该指令不会显示任何信息。若发现有差异&#xff0c;预设会标示出第一个不通之处的字符和列数编号。若不指定任何文件名称或是…

TIA博途中通过SCATTER指令实现将字节BYTE拆分成单个位的具体方法示例

TIA博途中通过SCATTER指令实现将字节BYTE拆分成单个位的具体方法示例 例如: 我们想判断某个字节中各个位的状态是1还是0 ,如何实现呢? 这里介绍通过SCATTER指令拆分字节的方法,仅供大家参考。 首先,我们先了解以下SCATTER指令的基本功能和使用方法: 如下图所示,在基本指…

无纸化办公小程序数据交互、wxs的使用

前言 很多同志们再写小程序的过程中&#xff0c;不知道该怎么发起HTTP请求到后端&#xff0c;在Web环境中发起HTTPS请求是很常见的&#xff0c;但是微信小程序是腾讯内部的产品&#xff0c;不能直接打开一个外部的链接。例如&#xff0c;在微信小程序中不能直接打开www.taobao…

冒泡排序、插入排序、选择排序和快速排序的原理

下面是对冒泡排序、插入排序、选择排序和快速排序的原理的简要解释&#xff1a; 冒泡排序&#xff08;Bubble Sort&#xff09;&#xff1a;冒泡排序是一种简单的排序算法。它通过多次迭代比较相邻的元素&#xff0c;并交换它们的位置&#xff0c;使得较大&#xff08;或较小&…

1600*D. Maximum Sum on Even Positions(贪心)

Problem - 1373D - Codeforces 解析&#xff1a; 显然可以发现&#xff0c;翻转数量为奇数是不影响结果&#xff0c;所以需要反转偶数个连续数字。 考虑贪心&#xff0c;我们每次反转相邻的两个数字&#xff0c;并且累计贡献&#xff0c;如果贡献为0则清空继续累计&#xff0c;…

Element Plus el-select选择框失去焦点blur

正常情况下&#xff0c;可以使用 el-select 自带的方法 blur 事件来使select失去焦点 示例&#xff1a; <el-select v-model"value" ref"selectRef"><el-optionv-for"item in options":key"item.value":label"item.la…

SQL sever中的存储过程

在Oracle的专篇中我也有仔细总结了存储过程的相关内容&#xff0c; 文章链接&#xff1a;http://t.csdnimg.cn/Z8AnH 尽管Oracle和SQL sever之间是存在一些区别&#xff0c;但许多基本的概念和原则在Oracle和SQL Server之间是通用的。它们之间有一些常见的区别&#xff0c;如下…

毅速科普课堂丨3D打印随形水路模具制造的一般流程

随形水路模具因其能大幅度提升冷却效率、缩短冷却时间、提升产品良率、提高生产效率的特点受到广泛应用&#xff0c;通常一件3D打印随形水路模具的制造需要经过多个步骤&#xff0c;包括设计、打印、后处理等多个环节&#xff0c;以确保模具的质量和性能符合预期需求。 首先&am…

分型+预后模型多层面验证,干湿结合直达7+

今天给同学们分享一篇铜死亡分型预后模型实验的生信文章“Construction and validation of a cuproptosis-related prognostic model for glioblastoma”&#xff0c;这篇文章于2023年2月6日发表在Front Immunol期刊上&#xff0c;影响因子为7.3。 铜死亡是一种新报道的程序性细…

【大模型AIGC系列课程 3-8】AI 代理的应用

1. 如果有一群角色(AI Agent)会发生什么? Generative Agents: Interactive Simulacra of Human Behavior Paper: https://arxiv.org/abs/2304.03442 Demo: https://reverie.herokuapp.com/arXiv_Demo/ 我们的生成式代理架构。代理感知(Perceive)其环境(Env),所有感知都…

网络协议--RARP:逆地址解析协议

5.1 引言 具有本地磁盘的系统引导时&#xff0c;一般是从磁盘上的配置文件中读取IP地址。但是无盘机&#xff0c;如X终端或无盘工作站&#xff0c;则需要采用其他方法来获得IP地址。 网络上的每个系统都具有唯一的硬件地址&#xff0c;它是由网络接口生产厂家配置的。无盘系统…

IDEA | 快速解决java.net.BindException Address already in use Cannot bind

最近在调试TCP/IP网络编程时&#xff0c;经常会遇到如下异常 这是由于程序异常关闭导致的端口 被 异常关闭的僵尸程序所占用 解决方案&#xff1a; 在命令行中输入 netstat -ano|findstr 端口号 ————查询到占用端口号的进程 根据端口号强制杀死占用该端口号的僵尸程序 t…

SpringCloud之Nacos配置中心解读

目录 基本介绍 概述 动态配置服务 多配置格式编辑器 微服务拉取配置流程 Data ID RefreshScope 配置共享的优先级 实战使用 简单的共享配置 开发环境的共享配置 环境隔离-命名空间Namespace 业务隔离-Group分组 基本介绍 概述 Nacos除了可以做注册中心&#x…

怎样找外企/远程的工作

“如果你既不想卷&#xff0c;又不想参与职场的勾心斗角&#xff0c;也不算行业大牛&#xff0c;还不愿意冒太高风险&#xff0c;那还有一种渠道&#xff0c;就是找海外公司的远程工作&#xff0c;比如我有几个程序员朋友&#xff0c;都是拿着硅谷动辄 20w 刀的薪水&#xff0c…

【标准化封装 SOT系列 】 E SOT-89

〇、SOT-89 这个封装也比较常见&#xff0c;但并不易错。 一、E部分 SOT-89 参数 pin-pin 间距1.5mm body size 4.52.5 二、符合当前标准的典型举例 名称pin 数厂家 body DE矩形 (mm)SOT-894Mini-Circuits – PGA-102 — 4.39/4.62.29/2.59 上图 MiniCircuits 也称DF78…