分布式服务框架XXL-RPC异常处理(com.xxl.rpc.util.XxlRpcException: xxl-rpc request data empty.)

使用分布式服务框架XXL-RPC异常处理

起因
项目进行到中后期,逐步完善,接触到了分布式服务框架XXL-RPC。自己出用好奇,准备自己搭建XXL进行测试学习。

XXL服务配置
XXL服务可以直接从git上拉取,按照文档就可以将XXL服务启动,这里就不详细介绍配置过程了。
分布式服务框架XXL文档:分布式服务框架XXL
服务部署完毕就可以启动XXL的任务调度中心。分布式服务框架XXL-RPC异常处理(com.xxl.rpc.util.XxlRpcException: xxl-rpc request data empty.)_第1张图片
测试
任务调度中心启动成功,该进行下一步 任务发布了。于是乎自己创建一个springboot的demo程序 。将demo部署到服务器启动时就出现了com.xxl.rpc.util.XxlRpcException: xxl-rpc request data empty.问题,如下:分布式服务框架XXL-RPC异常处理(com.xxl.rpc.util.XxlRpcException: xxl-rpc request data empty.)_第2张图片

但项目依旧启动了,报着试一试的心态给XXL任务调度中心发布定时任务,这里任务调度中心可以看到后台查看任务已完成,但是,页面无法显示 执行结果为成功,一直处于 执行中状态,必须手动停止,且执行结果为失败。如下:
只能手动终止任务
在这里插入图片描述
解决方法
折腾了一下午,但是发现网上这块的资料很少,所以打算把解决过程用博客记录下来,希望可以帮助到遇到同样问题的同学们。
这里是我demo的XXL配置:

        <dependency>
            <groupId>com.xuxueli</groupId>
            <artifactId>xxl-job-core</artifactId>
            <version>2.1.0</version>
        </dependency>
# 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册""任务结果回调";为空则关闭自动注册;
xxl:
  job:
    admin:
      addresses: http://ip+端口号/xxl-job-admin
    executor:
      # 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
      appname: xxl-job-executor-user
      # 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册""调度中心请求并触发任务";
      ip:
      #执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
      port: 9999
      # 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
      logpath:
      # 执行器日志保存天数 [选填] :值大于3时生效,启用执行器Log文件定期清理功能,否则不生效;
      logretentiondays: -1
    # 执行器通讯TOKEN [选填]:非空时启用;
    accessToken:
@Slf4j
@Component
@JobHandler(value = "jobDemo")
@Configuration
public class DemoJobHandler extends IJobHandler {
    @Override
    public ReturnT<String> execute(String s) throws Exception {
        log.info("XXL-JOB,HELLO WORLD");
        for (int i = 0; i < 10; i++) {
            System.out.println("excuting......");
            Thread.sleep(2000);
        }
        return SUCCESS;
    }
}

这是XXL2.1.0版本的配置和实现。并没有发现配置问题,最后在还是在官网上发现,最新版本中2.1.2中@JobHandler注解已过时,取而代之的是@XxlJob注解,也不需要去继承IJobHandler类。以下是修改后的代码配置:

        <dependency>
            <groupId>com.xuxueli</groupId>
            <artifactId>xxl-job-core</artifactId>
            <version>2.1.2</version>
        </dependency>
@Slf4j
@Component
public class DemoJobHandler {

    @XxlJob("jobDemo")
    public ReturnT<String> jobDemo(String s) throws Exception {
        log.info("XXL-JOB,HELLO WORLD");
        for (int i = 0; i < 10; i++) {
            System.out.println("excuting......");
            Thread.sleep(2000);
        }
        return SUCCESS;
    }
}

解决
将修改后的demo项目部署到服务器,com.xxl.rpc.util.XxlRpcException: xxl-rpc request data empty.问题就没有再出现。
分布式服务框架XXL-RPC异常处理(com.xxl.rpc.util.XxlRpcException: xxl-rpc request data empty.)_第3张图片
在这里插入图片描述
分析
出现错误的几种原因:
1、xxl-job-admin登陆网址和执行器配置文件xxl-job-executor.properties里面的xxl.job.admin.addresses不相同的原因,页面为:http://localhost:8091/xxl-job-admin/,那配置文件里也应该相同为http://localhost:8091/xxl-job-admin,如果是:http://localhost:8091/,那配置文件里的地址也应该为http://localhost:8091/。
2、执行器注册地址错误,
3、执行器项目没启动或者启动失败,
4、执行器注册地址为空
5、执行器与服务端配置不匹配

以上是个人处理方式,仅供参考!

你可能感兴趣的:(分布式服务框架XXL-RPC)