Преглед изворни кода

执行器注册线程优化,线程销毁时主动摘除注册机器;

xuxueli пре 8 година
родитељ
комит
7bc11fcbc4

+ 1 - 0
doc/XXL-JOB官方文档.md Прегледај датотеку

@@ -987,6 +987,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
987 987
 - 4、执行器手动设置IP时将会绑定Host;
988 988
 - 5、项目主页搭建,提供中英文文档;
989 989
 - 6、执行器回调线程优化,线程销毁前批量回调队列中所有数据;
990
+- 7、执行器注册线程优化,线程销毁时主动摘除注册机器;
990 991
 
991 992
 ### TODO LIST
992 993
 - 1、任务权限管理:执行器为粒度分配权限,核心操作校验权限;

+ 4 - 0
xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobRegistryDao.java Прегледај датотеку

@@ -22,4 +22,8 @@ public interface XxlJobRegistryDao {
22 22
                             @Param("registryKey") String registryKey,
23 23
                             @Param("registryValue") String registryValue);
24 24
 
25
+    public int registryDelete(@Param("registryGroup") String registGroup,
26
+                          @Param("registryKey") String registryKey,
27
+                          @Param("registryValue") String registryValue);
28
+
25 29
 }

+ 6 - 0
xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/AdminBizImpl.java Прегледај датотеку

@@ -118,4 +118,10 @@ public class AdminBizImpl implements AdminBiz {
118 118
         return ReturnT.SUCCESS;
119 119
     }
120 120
 
121
+    @Override
122
+    public ReturnT<String> registryRemove(RegistryParam registryParam) {
123
+        xxlJobRegistryDao.registryDelete(registryParam.getRegistGroup(), registryParam.getRegistryKey(), registryParam.getRegistryValue());
124
+        return ReturnT.SUCCESS;
125
+    }
126
+
121 127
 }

+ 7 - 0
xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml Прегледај датотеку

@@ -43,4 +43,11 @@
43 43
         VALUES( #{registryGroup}  , #{registryKey} , #{registryValue}, NOW())
44 44
     </insert>
45 45
 
46
+	<delete id="registryDelete" >
47
+		DELETE FROM XXL_JOB_QRTZ_TRIGGER_REGISTRY
48
+		WHERE registry_group = #{registryGroup}
49
+			AND registry_key = #{registryKey}
50
+			AND registry_value = #{registryValue}
51
+	</delete>
52
+
46 53
 </mapper>

+ 7 - 0
xxl-job-admin/src/test/java/com/xxl/job/dao/impl/AdminBizTest.java Прегледај датотеку

@@ -27,6 +27,13 @@ public class AdminBizTest {
27 27
         ReturnT<String> returnT = adminBiz.registry(registryParam);
28 28
         Assert.assertTrue(returnT.getCode() == ReturnT.SUCCESS_CODE);
29 29
 
30
+
31
+
32
+        // test executor registry remove
33
+        registryParam = new RegistryParam(RegistryConfig.RegistType.EXECUTOR.name(), "xxl-job-executor-example", "127.0.0.1:9999");
34
+        returnT = adminBiz.registryRemove(registryParam);
35
+        Assert.assertTrue(returnT.getCode() == ReturnT.SUCCESS_CODE);
36
+
30 37
     }
31 38
 
32 39
 }

+ 8 - 0
xxl-job-core/src/main/java/com/xxl/job/core/biz/AdminBiz.java Прегледај датотеку

@@ -29,4 +29,12 @@ public interface AdminBiz {
29 29
      */
30 30
     public ReturnT<String> registry(RegistryParam registryParam);
31 31
 
32
+    /**
33
+     * registry remove
34
+     *
35
+     * @param registryParam
36
+     * @return
37
+     */
38
+    public ReturnT<String> registryRemove(RegistryParam registryParam);
39
+
32 40
 }

+ 21 - 0
xxl-job-core/src/main/java/com/xxl/job/core/thread/ExecutorRegistryThread.java Прегледај датотеку

@@ -47,6 +47,8 @@ public class ExecutorRegistryThread extends Thread {
47 47
         registryThread = new Thread(new Runnable() {
48 48
             @Override
49 49
             public void run() {
50
+
51
+                // registry
50 52
                 while (!toStop) {
51 53
                     try {
52 54
                         RegistryParam registryParam = new RegistryParam(RegistryConfig.RegistType.EXECUTOR.name(), appName, executorAddress);
@@ -77,7 +79,26 @@ public class ExecutorRegistryThread extends Thread {
77 79
                 }
78 80
 
79 81
                 // registry remove
82
+                try {
83
+                    RegistryParam registryParam = new RegistryParam(RegistryConfig.RegistType.EXECUTOR.name(), appName, executorAddress);
84
+                    for (AdminBiz adminBiz: XxlJobExecutor.getAdminBizList()) {
85
+                        try {
86
+                            ReturnT<String> registryResult = adminBiz.registryRemove(registryParam);
87
+                            if (registryResult!=null && ReturnT.SUCCESS_CODE == registryResult.getCode()) {
88
+                                registryResult = ReturnT.SUCCESS;
89
+                                logger.info(">>>>>>>>>>> xxl-job registry-remove success, registryParam:{}, registryResult:{}", new Object[]{registryParam, registryResult});
90
+                                break;
91
+                            } else {
92
+                                logger.info(">>>>>>>>>>> xxl-job registry-remove fail, registryParam:{}, registryResult:{}", new Object[]{registryParam, registryResult});
93
+                            }
94
+                        } catch (Exception e) {
95
+                            logger.info(">>>>>>>>>>> xxl-job registry-remove error, registryParam:{}", registryParam, e);
96
+                        }
80 97
 
98
+                    }
99
+                } catch (Exception e) {
100
+                    logger.error(e.getMessage(), e);
101
+                }
81 102
 
82 103
             }
83 104
         });