xxl-job(三)带参数执行和高可用部署

一、带参执行:

1、获取参数:

job获取参数在不同版本略微有些区别,如2.3.0版本:

 @XxlJob("TestOneHandler")
    public ReturnT<String> jobDemo(String s) throws Exception {
        String param = XxlJobHelper.getJobParam();
        System.out.println("TestOneHandler执行参数:"+param);
        return SUCCESS;
    }

2.1.2版本:

 @XxlJob(value = "myTestJob")
    public ReturnT<String> jobHandler(String param) {
        try {
            jobHandleCommonService.handleData(param);
        } catch (Exception e) {
            LOGGER.error("myTestJoberror", e);
            ReturnT<String> returnT = ReturnT.FAIL;
            returnT.setMsg(e.getMessage());
            return returnT;
        }
        return ReturnT.SUCCESS;
    }
 2、demo:

(1)单参数:

package com.job.client.jobhandle;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;
import static com.xxl.job.core.biz.model.ReturnT.SUCCESS;

@Component
public class TestOneHandler {

    @XxlJob("TestOneHandler")
    public ReturnT<String> jobDemo(String s) throws Exception {
        String param = XxlJobHelper.getJobParam();
        System.out.println("TestOneHandler执行参数:"+param);
        return SUCCESS;
    }
}

后台:

(2)多参数:自定义分割方式

package com.job.client.jobhandle;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;
import static com.xxl.job.core.biz.model.ReturnT.SUCCESS;

@Component
public class TestOneHandler {

    @XxlJob("TestOneHandler")
    public ReturnT<String> jobDemo(String s) throws Exception {
        String param = XxlJobHelper.getJobParam();
        String[] methodParams = param.split(",");
        System.out.println("TestOneHandler执行参数1:"+methodParams[0]);
        System.out.println("TestOneHandler执行参数2:"+methodParams[1]);
        return SUCCESS;
    }
}

后台:

二、多节点部署:

admin服务端只部署一个节点(xxx.xx.xxx.141),Job客户端部署两个节点(一个是xxx.xx.xxx.141,一个是我本地机器xxx.xx.xxx.191,两台机器在一个内网环境下)

代码改动:如我新增一张表,job1执行时往这张表塞入数据:

CREATE TABLE `t_record` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `msg` varchar(255) DEFAULT NULL,
  `params` varchar(255) DEFAULT NULL,
  `ip` varchar(255) DEFAULT NULL,
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;

package com.job.client.jobhandle;
import com.job.client.dto.RecordDTO;
import com.job.client.service.RecordService;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import static com.xxl.job.core.biz.model.ReturnT.SUCCESS;

@Component
public class TestOneHandler {

    @Autowired
    private RecordService recordService;

    @XxlJob("TestOneHandler")
    public ReturnT<String> jobDemo(String s) throws Exception {
        String param = XxlJobHelper.getJobParam();
        System.out.println("TestOneHandler执行参数:"+param);
        RecordDTO record = new RecordDTO();
        record.setIp("");
        record.setParams(param);
        recordService.insert(record);
        return SUCCESS;
    }
}

pom文件加上打包命令:
 

<packaging>jar</packaging> 
<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

1、部署xxl-job-admin服务端:

 在xxl-job-admin项目下执行mvn clean package打包,把生成的jar包上传到141服务器上并执行启动命令

java -jar xxl-job-admin-2.3.0.jar &

启动后访问:

2、job-client部署:把job中的ip改为141,并修改xxl.job.admin.addresses的值为http://xxx.xx.xxx.141:7777/xxl-job-admin。

在job-client项目下也执行mvn clean package把打包后的jar包上传到141上,执行java -jar job-client-1.0-SNAPSHOT.jar &启动。

3、本地节点启动:修改xxl.job.executor.port的值为5555(不修改保持9999也可以,这里用了不一样的端口测试配置);修改xxl.job.admin.addresses的值为http://xxx.xx.xxx.141:7777/xxl-job-admin。

并把job中的ip改为localhost。启动项目

4、测试:

编辑执行器,加入两个节点,如:

并修改jobOne的执行策略为轮询:

1)job自动执行一段时间,观察下数据库,可以看到同一个任务不会被多次执行:

2)手动执行一次,也不会被多次执行:

3)这时候把141的job节点停掉:

可以看到都是localhost节点在执行。

XXL-Job执行器是XXL-Job分布式任务调度平台中的一个核心组件,负责接收执行调度中心发送的任务。执行器可以独立部署在各个执行节点上,通过与调度中心进行通信,实现任务的调度执行XXL-Job执行器提供了丰富的功能接口,主要包括以下几个方面: 1. 任务执行执行器接收到调度中心发送的任务后,负责根据任务类型进行相应的执行XXL-Job支持多种任务类型,如Shell任务、Java任务、Python任务等,执行器会根据任务类型来执行相应的逻辑。 2. 任务参数传递:执行器可以接收调度中心传递的任务参数,并将参数传递给具体的任务执行逻辑。任务参数可以在任务配置中进行设置,执行器会根据配置将参数传递给任务。 3. 任务结果回调:执行器在任务执行完成后,会将任务执行结果回调给调度中心。调度中心可以根据任务执行结果进行相应的处理,如记录日志、发送通知等。 4. 心跳检测:执行器会定期向调度中心发送心跳信息,用于告知调度中心自身的存活状态可用性。调度中心可以通过心跳检测来监控执行器的健康状态。 5. 日志上报:执行器会将任务执行过程中的日志上报给调度中心,便于开发者查看任务的日志输出排查问题。 XXL-Job执行器可以根据实际需求进行灵活的部署配置,可以实现任务的并发执行负载均衡,提高任务执行的效率可靠性。同时,执行器还提供了可扩展的接口,可以与其他系统进行集成,满足更复杂的业务需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

w_t_y_y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值