springCloud2.x版本集成elasticJob curator不兼容问题demo

springCloud2.x版本集成elasticJob curator不兼容问题demo

    • 背景
    • elasticJob集成步骤
    • 冲突原因(curator-framework/curator-client/curator-recipes)
    • 版本冲突错误代码:
    • 排查问题原因
    • 解决办法:
    • 结束

背景

最近公司需要我集成elasticjob到现有项目,编写demo过程都很顺利,但是集成到项目时发现了一些问题,于是写文章记录了一下.
重要的事情说三遍:
只支持zookeeper是3.5.x以上版本!!!
只支持zookeeper是3.5.x以上版本!!!
只支持zookeeper是3.5.x以上版本!!!
其他版本的zookeeper不用往下看了.

elasticJob集成步骤

下面是我集成clasticJob的步骤:

  1. 官网了解elasticJob如何集成;
  2. 下载官网demo,新建springboot项目走起;
  3. 因为公司想做成通用的,所以自定义写了注解;
  4. 集成进项目(结果发现问题);
  5. 在demo的springBoot项目上解决版本冲突问题;
  6. 写成starter集成进项目;

冲突原因(curator-framework/curator-client/curator-recipes)

由于springCloud注册中心用的zookeeper,所以discover的pom文件引用curator-xxx 4.1.0版本,但需要集成的elasticJob也用zk作为注册中心,同样引用了curatorjar包,不过是2.10.0版本,集成之后启动会报jar包冲突错误,用4.0.1版本elastic会出现错误,用2.10.0版本springCloud会报错误(不向下兼容很难受)

版本冲突错误代码:

***************************
APPLICATION FAILED TO START
***************************

Description:

An attempt was made to call the method org.apache.curator.framework.api.CreateBuilder.creatingParentsIfNeeded()Lorg/apache/curator/framework/api/ProtectACLCreateModePathAndBytesable; but it does not exist. Its class, org.apache.curator.framework.api.CreateBuilder, is available from the following locations:

    jar:file:/C:/Users/xxxxxx/.m2/repository/org/apache/curator/curator-framework/4.0.1/curator-framework-4.0.1.jar!/org/apache/curator/framework/api/CreateBuilder.class

It was loaded from the following location:

    file:/C:/Users/xxxxxx/.m2/repository/org/apache/curator/curator-framework/4.0.1/curator-framework-4.0.1.jar

排查问题原因

  1. 因为springCloud不可能降版本,所以只能用4.0.1版本.
  2. 经排查发现是在创建zk节点时候发生的错误.
  3. 但由于2.10.0版本引用的zookeeper的jar包是3.4版本,4.0.1版本引用的zk是3.5版本,如果引用了4.0.1版本的而用3.4的zk会zk会一直重连,所以不支持3.4以下的zk(3.4的也不支持)

解决办法:

  1. 重写com.dangdang.ddframe.job.reg.zookeeper.ZookeeperRegistryCenter类,这个是elasticjob中的class不存在版本问题
    直接粘出来即可,可能是我idea的问题,发现不重写这个类断点进入不了重写的impl中所以重写,没做什么修改…(大写的尴尬)

  2. 重写org.apache.curator.framework.imps.CreateBuilderImpl类,源码用4.0.1的源码,只需要删几行添加一行代码即可.修改pathInForeground方法大约在1175行左右

    如图:
    springCloud2.x版本集成elasticJob curator不兼容问题demo_第1张图片

createdPath = client.getZooKeeper().create(path, data, acling.getAclList(path), createMode);
  • 即可 之后启动项目,用4.0.1版本就可以集成elasticJob了,搞定. 附图:

springCloud2.x版本集成elasticJob curator不兼容问题demo_第2张图片
目录结构附图:
springCloud2.x版本集成elasticJob curator不兼容问题demo_第3张图片

  • 两个类地址:https://download.csdn.net/download/limiaaa2011/12099739

结束

本人小菜一枚,第一次在CSDN发表文章,望各位不喜勿喷.之后做成starter的demo(只是demo只集成simplejob中的部分属性)***可能***在后续的文章中陆续更新.

你可能感兴趣的:(springCloud2.x版本集成elasticJob curator不兼容问题demo)