热爱技术,追求卓越
不断求索,精益求精

解决elasticJob项目重启zookeeper注册冲突以及zkCli删除目录

使用的elasticjob是当前最新版3.0.1.

<dependency>
    <groupId>org.apache.shardingsphere.elasticjob</groupId>
    <artifactId>elasticjob-lite-spring-boot-starter</artifactId>
    <version>3.0.1</version>
</dependency>

重启的时候遇到zookeeper注册冲突,网上查找解决方案,找到如下:

我们项目中的定时任务使用了代理,导致项目重启的时候
会报任务名冲突,提示任务已经在注册中心存在。于是,
我们加了以下的spring spi配置,让定时任务类在项目
启动的时候读取到原本的class类名,就不会提示冲突了。

https://blog.csdn.net/YANGYYID/article/details/116494593

按照这个方法修改后还是不行,回退版本也不行;后来参考这个方法,修改SpringProxyJobClassNameProvider,自定义的CustomJobClassNameProvider代码如下:

public class CustomJobClassNameProvider implements JobClassNameProvider{

    /* (non-Javadoc)
     * @see org.apache.shardingsphere.elasticjob.lite.internal.setup.JobClassNameProvider#getJobClassName(org.apache.shardingsphere.elasticjob.api.ElasticJob)
     */
    @Override
    public String getJobClassName(ElasticJob elasticJob) {
        //System.out.println("use SpringProxyJobClassNameProvider");
        String elasticJobClassName = ClassUtils.getUserClass(elasticJob).getName();
        String jobClassName = AopUtils.isAopProxy(elasticJob) ? elasticJobClassName : elasticJob.getClass().getName();
        //System.out.println(jobClassName);
        return jobClassName;
    }

}

使用ClassUtils.getUserClass(elasticJob).getName()这种方式来获取类名,接下来不管怎么重启都没有问题了。

记得在src/main/resources目录下新建META-INF目录,在META-INF目录下创建services目录,创建一个名为org.apache.shardingsphere.elasticjob.lite.internal.setup.JobClassNameProvider的文件,里面只有一行代码,就是CustomJobClassNameProvider的全路径(你类在什么包,则类名前面就是你的报名):

xxx.xxx.xxx.xxx.CustomJobClassNameProvider

zkCli 操作

我的zk安装目录是/var/www/data/zookeeper/zookeeper-3.8.0,进入/var/www/data/zookeeper/zookeeper-3.8.0/bin,运行zkCli.sh

:/var/www/data/zookeeper/zookeeper-3.8.0/bin$ ./zkCli.sh

查看节点目录

[zk: localhost:2181(CONNECTED) 21] ls /

删除节点:

[zk: localhost:2181(CONNECTED) 22] deleteall /elasticjob-admin-api-v0.7
赞(1)
未经允许不得转载:LoveCTO » 解决elasticJob项目重启zookeeper注册冲突以及zkCli删除目录

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

热爱技术 追求卓越 精益求精