-
Notifications
You must be signed in to change notification settings - Fork 160
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
jobService.addJob通过获取ZK信息注册任务的例外场景 #21
Comments
还可以在监听的时候,留下扩展接口,将如何添加job的控制权交给应用程序来管理。 |
if(!jobRecord.containsKey(job.getJobName())){
|
目前动态job是这样设计的,因为原生的ESJob没有带这个功能,这个是我自己扩展加上去的。 所以B在A注册成功之后,再次启动是肯定不会去注册的。也不会执行case CHILD_ADDED这里的逻辑,因为zk节点增加的时候,B还不在线。 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
#1、问题
现有代码是通过判断计数器JOB_ADD_COUNT是否为1来决定是否执行addJob(job)方法,但是这样还是有例外场景。
#2、场景
比如有进程A,B,都需要执行同样的任务,先启动进程A,显示调用了addJob方法,此时在zk上完成任务的注册。待注册成功后启动进程B,没有显示调用addJob,那么monitorJobRegister方法启动监听,执行
case CHILD_ADDED的逻辑,但是在进程B中由于还没有执行对应job的addJob方法,此时的计数器还没有初始化,那么monitorJobRegister中的的动态注册任务是不会执行的。
#3、分析
正常情况下,进程启动后,由进程解析ElasticJobConf,然后注册任务(addJob),那么原有的逻辑是不会有问题的,但是存在一种例外情况,如上所述,启动进程B,在上下文中没有ElasticJobConf注解,纯碎是根据zk的注册信息,通过执行monitorJobRegister监听代码,完成任务的注册。
建议,可以综合考虑上述的两种情况,在JobService中维护一个任务注册器,只要任务已经注册了,就不调用addJob方法,否则就执行。
The text was updated successfully, but these errors were encountered: