Преглед на файлове

执行器手动设置IP时将会绑定Host;

xuxueli преди 7 години
родител
ревизия
0b4849bb61

+ 6 - 4
doc/XXL-JOB官方文档.md Целия файл

238
     ### xxl-job admin address list:调度中心部署跟地址:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调"。
238
     ### xxl-job admin address list:调度中心部署跟地址:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调"。
239
     xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
239
     xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
240
     
240
     
241
-    ### xxl-job executor address:执行器"AppName"和地址信息配置:AppName执行器心跳注册分组依据;地址信息用于"调度中心请求并触发任务"和"执行器注册"。执行器默认端口为9999,执行器IP默认为空表示自动获取IP,多网卡时可手动设置指定IP。单机部署多个执行器时,注意要配置不同执行器端口;
241
+    ### xxl-job executor address:执行器"AppName"和地址信息配置:AppName执行器心跳注册分组依据;地址信息用于"调度中心请求并触发任务"和"执行器注册"。执行器默认端口为9999,执行器IP默认为空表示自动获取IP,多网卡时可手动设置指定IP,手动设置IP时将会绑定Host。单机部署多个执行器时,注意要配置不同执行器端口;
242
     xxl.job.executor.appname=xxl-job-executor-sample
242
     xxl.job.executor.appname=xxl-job-executor-sample
243
     xxl.job.executor.ip=
243
     xxl.job.executor.ip=
244
     xxl.job.executor.port=9999
244
     xxl.job.executor.port=9999
984
 - 1、解决执行器回调URL不支持配置HTTPS时问题;
984
 - 1、解决执行器回调URL不支持配置HTTPS时问题;
985
 - 2、规范项目目录,方便扩展多执行器;
985
 - 2、规范项目目录,方便扩展多执行器;
986
 - 3、新增JFinal类型执行器sample示例项目;
986
 - 3、新增JFinal类型执行器sample示例项目;
987
+- 4、执行器手动设置IP时将会绑定Host;
988
+- 5、项目主页搭建,提供中英文文档;
989
+- 6、执行器回调线程优化,线程销毁前批量回调队列中所有数据;
987
 
990
 
988
 ### TODO LIST
991
 ### TODO LIST
989
 - 1、任务权限管理:执行器为粒度分配权限,核心操作校验权限;
992
 - 1、任务权限管理:执行器为粒度分配权限,核心操作校验权限;
994
 - 6、调度任务优先级;
997
 - 6、调度任务优先级;
995
 - 7、移除quartz依赖,重写调度模块:新增或恢复任务时将下次执行记录插入delayqueue,调度中心集群竞争分布式锁,成功节点批量加载到期delayqueue数据,批量执行。
998
 - 7、移除quartz依赖,重写调度模块:新增或恢复任务时将下次执行记录插入delayqueue,调度中心集群竞争分布式锁,成功节点批量加载到期delayqueue数据,批量执行。
996
 - 8、springboot 和 docker镜像,并且推送docker镜像到中央仓库,更进一步实现产品开箱即用;
999
 - 8、springboot 和 docker镜像,并且推送docker镜像到中央仓库,更进一步实现产品开箱即用;
997
-- 9、国际化:调度中心界面 + 官方文档,新增英文版本
1000
+- 9、国际化:调度中心界面。
998
 - 10、执行器摘除:执行器销毁时,主动通知调度中心并摘除对应执行器节点,提高执行器状态感知的时效性。
1001
 - 10、执行器摘除:执行器销毁时,主动通知调度中心并摘除对应执行器节点,提高执行器状态感知的时效性。
999
 - 11、调度中心API服务:支持API方式触发任务执行;
1002
 - 11、调度中心API服务:支持API方式触发任务执行;
1000
-- 12、执行器启动,设定IP的时候,主动绑定IP,避免攻击;
1001
-- 13、任务参数类型改为string,进一步方便参数传递;
1003
+- 12、任务参数类型改为string,进一步方便参数传递;
1002
 
1004
 
1003
 ## 七、其他
1005
 ## 七、其他
1004
 
1006
 

+ 1 - 1
xxl-job-admin/src/main/webapp/static/js/index.js Целия файл

122
             },
122
             },
123
             series : [
123
             series : [
124
                 {
124
                 {
125
-                    name: '访问来源',
125
+                    name: '分布比例',
126
                     type: 'pie',
126
                     type: 'pie',
127
                     radius : '55%',
127
                     radius : '55%',
128
                     center: ['50%', '60%'],
128
                     center: ['50%', '60%'],

+ 3 - 0
xxl-job-core/src/main/java/com/xxl/job/core/rpc/netcom/jetty/server/JettyServer.java Целия файл

30
 
30
 
31
 				// HTTP connector
31
 				// HTTP connector
32
 				ServerConnector connector = new ServerConnector(server);
32
 				ServerConnector connector = new ServerConnector(server);
33
+				if (ip!=null && ip.trim().length()>0) {
34
+					connector.setHost(ip);	// The network interface this connector binds to as an IP address or a hostname.  If null or 0.0.0.0, then bind to all interfaces.
35
+				}
33
 				connector.setPort(port);
36
 				connector.setPort(port);
34
 				server.setConnectors(new Connector[]{connector});
37
 				server.setConnectors(new Connector[]{connector});
35
 
38
 

+ 5 - 1
xxl-job-core/src/main/java/com/xxl/job/core/thread/ExecutorRegistryThread.java Целия файл

23
     }
23
     }
24
 
24
 
25
     private Thread registryThread;
25
     private Thread registryThread;
26
-    private boolean toStop = false;
26
+    private volatile boolean toStop = false;
27
     public void start(final int port, final String ip, final String appName){
27
     public void start(final int port, final String ip, final String appName){
28
 
28
 
29
         // valid
29
         // valid
75
                         logger.error(e.getMessage(), e);
75
                         logger.error(e.getMessage(), e);
76
                     }
76
                     }
77
                 }
77
                 }
78
+
79
+                // registry remove
80
+
81
+
78
             }
82
             }
79
         });
83
         });
80
         registryThread.setDaemon(true);
84
         registryThread.setDaemon(true);

+ 55 - 25
xxl-job-core/src/main/java/com/xxl/job/core/thread/TriggerCallbackThread.java Целия файл

22
         return instance;
22
         return instance;
23
     }
23
     }
24
 
24
 
25
+    /**
26
+     * job results callback queue
27
+     */
25
     private LinkedBlockingQueue<HandleCallbackParam> callBackQueue = new LinkedBlockingQueue<HandleCallbackParam>();
28
     private LinkedBlockingQueue<HandleCallbackParam> callBackQueue = new LinkedBlockingQueue<HandleCallbackParam>();
29
+    public static void pushCallBack(HandleCallbackParam callback){
30
+        getInstance().callBackQueue.add(callback);
31
+        logger.debug(">>>>>>>>>>> xxl-job, push callback request, logId:{}", callback.getLogId());
32
+    }
26
 
33
 
34
+    /**
35
+     * callback thread
36
+     */
27
     private Thread triggerCallbackThread;
37
     private Thread triggerCallbackThread;
28
-    private boolean toStop = false;
38
+    private volatile boolean toStop = false;
29
     public void start() {
39
     public void start() {
40
+
41
+        // valid
42
+        if (XxlJobExecutor.getAdminBizList() == null) {
43
+            logger.warn(">>>>>>>>>>>> xxl-job, executor callback config fail, adminAddresses is null.");
44
+            return;
45
+        }
46
+
30
         triggerCallbackThread = new Thread(new Runnable() {
47
         triggerCallbackThread = new Thread(new Runnable() {
31
 
48
 
32
             @Override
49
             @Override
33
             public void run() {
50
             public void run() {
51
+
52
+                // normal callback
34
                 while(!toStop){
53
                 while(!toStop){
35
                     try {
54
                     try {
36
                         HandleCallbackParam callback = getInstance().callBackQueue.take();
55
                         HandleCallbackParam callback = getInstance().callBackQueue.take();
41
                             int drainToNum = getInstance().callBackQueue.drainTo(callbackParamList);
60
                             int drainToNum = getInstance().callBackQueue.drainTo(callbackParamList);
42
                             callbackParamList.add(callback);
61
                             callbackParamList.add(callback);
43
 
62
 
44
-                            // valid
45
-                            if (XxlJobExecutor.getAdminBizList()==null) {
46
-                                logger.warn(">>>>>>>>>>>> xxl-job callback fail, adminAddresses is null, callbackParamList:{}", callbackParamList);
47
-                                continue;
48
-                            }
49
-
50
                             // callback, will retry if error
63
                             // callback, will retry if error
51
-                            for (AdminBiz adminBiz: XxlJobExecutor.getAdminBizList()) {
52
-                                try {
53
-                                    ReturnT<String> callbackResult = adminBiz.callback(callbackParamList);
54
-                                    if (callbackResult!=null && ReturnT.SUCCESS_CODE == callbackResult.getCode()) {
55
-                                        callbackResult = ReturnT.SUCCESS;
56
-                                        logger.info(">>>>>>>>>>> xxl-job callback success, callbackParamList:{}, callbackResult:{}", new Object[]{callbackParamList, callbackResult});
57
-                                        break;
58
-                                    } else {
59
-                                        logger.info(">>>>>>>>>>> xxl-job callback fail, callbackParamList:{}, callbackResult:{}", new Object[]{callbackParamList, callbackResult});
60
-                                    }
61
-                                } catch (Exception e) {
62
-                                    logger.error(">>>>>>>>>>> xxl-job callback error, callbackParamList:{}", callbackParamList, e);
63
-                                    //getInstance().callBackQueue.addAll(callbackParamList);
64
-                                }
64
+                            if (callbackParamList!=null && callbackParamList.size()>0) {
65
+                                doCallback(callbackParamList);
65
                             }
66
                             }
66
-
67
                         }
67
                         }
68
                     } catch (Exception e) {
68
                     } catch (Exception e) {
69
                         logger.error(e.getMessage(), e);
69
                         logger.error(e.getMessage(), e);
70
                     }
70
                     }
71
                 }
71
                 }
72
+
73
+                // last callback
74
+                try {
75
+                    List<HandleCallbackParam> callbackParamList = new ArrayList<HandleCallbackParam>();
76
+                    int drainToNum = getInstance().callBackQueue.drainTo(callbackParamList);
77
+                    if (callbackParamList!=null && callbackParamList.size()>0) {
78
+                        doCallback(callbackParamList);
79
+                    }
80
+                } catch (Exception e) {
81
+                    logger.error(e.getMessage(), e);
82
+                }
83
+
72
             }
84
             }
73
         });
85
         });
74
         triggerCallbackThread.setDaemon(true);
86
         triggerCallbackThread.setDaemon(true);
78
         toStop = true;
90
         toStop = true;
79
     }
91
     }
80
 
92
 
81
-    public static void pushCallBack(HandleCallbackParam callback){
82
-        getInstance().callBackQueue.add(callback);
83
-        logger.debug(">>>>>>>>>>> xxl-job, push callback request, logId:{}", callback.getLogId());
93
+    /**
94
+     * do callback, will retry if error
95
+     * @param callbackParamList
96
+     */
97
+    private void doCallback(List<HandleCallbackParam> callbackParamList){
98
+        // callback, will retry if error
99
+        for (AdminBiz adminBiz: XxlJobExecutor.getAdminBizList()) {
100
+            try {
101
+                ReturnT<String> callbackResult = adminBiz.callback(callbackParamList);
102
+                if (callbackResult!=null && ReturnT.SUCCESS_CODE == callbackResult.getCode()) {
103
+                    callbackResult = ReturnT.SUCCESS;
104
+                    logger.info(">>>>>>>>>>> xxl-job callback success, callbackParamList:{}, callbackResult:{}", new Object[]{callbackParamList, callbackResult});
105
+                    break;
106
+                } else {
107
+                    logger.info(">>>>>>>>>>> xxl-job callback fail, callbackParamList:{}, callbackResult:{}", new Object[]{callbackParamList, callbackResult});
108
+                }
109
+            } catch (Exception e) {
110
+                logger.error(">>>>>>>>>>> xxl-job callback error, callbackParamList:{}", callbackParamList, e);
111
+                //getInstance().callBackQueue.addAll(callbackParamList);
112
+            }
113
+        }
84
     }
114
     }
85
 
115
 
86
 }
116
 }