Browse Source

执行器、调度中心,支持自定义注册IP地址;解决机器多网卡时错误网卡注册的情况;

xueli.xue 9 years ago
parent
commit
65cfe57b6b

+ 1 - 0
README.md View File

702
 
702
 
703
 #### 6.10 版本 V1.5.2 特性
703
 #### 6.10 版本 V1.5.2 特性
704
 - 1、IP工具类优化,IP静态缓存;
704
 - 1、IP工具类优化,IP静态缓存;
705
+- 2、执行器、调度中心,支持自定义注册IP地址;解决机器多网卡时错误网卡注册的情况;
705
 
706
 
706
 #### 规划中
707
 #### 规划中
707
 - 1、集群执行器选择规则自定义:单点=选择第一个,随机=随机选择一个;
708
 - 1、集群执行器选择规则自定义:单点=选择第一个,随机=随机选择一个;

+ 0 - 10
xxl-job-admin/src/main/java/com/xxl/job/admin/core/callback/XxlJobLogCallbackServer.java View File

9
 import org.slf4j.Logger;
9
 import org.slf4j.Logger;
10
 import org.slf4j.LoggerFactory;
10
 import org.slf4j.LoggerFactory;
11
 
11
 
12
-import com.xxl.job.core.util.IpUtil;
13
-
14
 /**
12
 /**
15
  * Created by xuxueli on 2016-5-22 11:15:42
13
  * Created by xuxueli on 2016-5-22 11:15:42
16
  */
14
  */
17
 public class XxlJobLogCallbackServer {
15
 public class XxlJobLogCallbackServer {
18
     private static final Logger logger = LoggerFactory.getLogger(XxlJobLogCallbackServer.class);
16
     private static final Logger logger = LoggerFactory.getLogger(XxlJobLogCallbackServer.class);
19
 
17
 
20
-    private static String trigger_log_address;
21
-    public static String getTrigger_log_address() {
22
-		return trigger_log_address;
23
-	}
24
-    
25
     Server server = null;
18
     Server server = null;
26
     public void start(int callBackPort) throws Exception {
19
     public void start(int callBackPort) throws Exception {
27
 
20
 
28
-    	// init address
29
-        trigger_log_address = IpUtil.getIpPort(callBackPort);
30
-		
31
     	final int port = Integer.valueOf(callBackPort);
21
     	final int port = Integer.valueOf(callBackPort);
32
         new Thread(new Runnable() {
22
         new Thread(new Runnable() {
33
             @Override
23
             @Override

+ 1 - 2
xxl-job-admin/src/main/java/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java View File

1
 package com.xxl.job.admin.core.jobbean;
1
 package com.xxl.job.admin.core.jobbean;
2
 
2
 
3
-import com.xxl.job.admin.core.callback.XxlJobLogCallbackServer;
4
 import com.xxl.job.admin.core.model.XxlJobGroup;
3
 import com.xxl.job.admin.core.model.XxlJobGroup;
5
 import com.xxl.job.admin.core.model.XxlJobInfo;
4
 import com.xxl.job.admin.core.model.XxlJobInfo;
6
 import com.xxl.job.admin.core.model.XxlJobLog;
5
 import com.xxl.job.admin.core.model.XxlJobLog;
51
         if (adminAddressList!=null) {
50
         if (adminAddressList!=null) {
52
             adminAddressSet.addAll(adminAddressList);
51
             adminAddressSet.addAll(adminAddressList);
53
         }
52
         }
54
-        adminAddressSet.add(XxlJobLogCallbackServer.getTrigger_log_address());
53
+        adminAddressSet.add(DynamicSchedulerUtil.getCallbackAddress());
55
 
54
 
56
 		// trigger request
55
 		// trigger request
57
 		RequestModel requestModel = new RequestModel();
56
 		RequestModel requestModel = new RequestModel();

+ 2 - 3
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryHelper.java View File

1
 package com.xxl.job.admin.core.thread;
1
 package com.xxl.job.admin.core.thread;
2
 
2
 
3
-import com.xxl.job.admin.core.callback.XxlJobLogCallbackServer;
4
 import com.xxl.job.admin.core.model.XxlJobRegistry;
3
 import com.xxl.job.admin.core.model.XxlJobRegistry;
5
 import com.xxl.job.admin.core.util.DynamicSchedulerUtil;
4
 import com.xxl.job.admin.core.util.DynamicSchedulerUtil;
6
 import com.xxl.job.core.registry.RegistHelper;
5
 import com.xxl.job.core.registry.RegistHelper;
29
 				while (true) {
28
 				while (true) {
30
 					try {
29
 					try {
31
                         // registry admin
30
                         // registry admin
32
-                        int ret = DynamicSchedulerUtil.xxlJobRegistryDao.registryUpdate(RegistHelper.RegistType.ADMIN.name(), RegistHelper.RegistType.ADMIN.name(), XxlJobLogCallbackServer.getTrigger_log_address());
31
+                        int ret = DynamicSchedulerUtil.xxlJobRegistryDao.registryUpdate(RegistHelper.RegistType.ADMIN.name(), RegistHelper.RegistType.ADMIN.name(), DynamicSchedulerUtil.getCallbackAddress());
33
                         if (ret < 1) {
32
                         if (ret < 1) {
34
-                            DynamicSchedulerUtil.xxlJobRegistryDao.registrySave(RegistHelper.RegistType.ADMIN.name(), RegistHelper.RegistType.ADMIN.name(), XxlJobLogCallbackServer.getTrigger_log_address());
33
+                            DynamicSchedulerUtil.xxlJobRegistryDao.registrySave(RegistHelper.RegistType.ADMIN.name(), RegistHelper.RegistType.ADMIN.name(), DynamicSchedulerUtil.getCallbackAddress());
35
                         }
34
                         }
36
 
35
 
37
                         // fresh registry map
36
                         // fresh registry map

+ 19 - 2
xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/DynamicSchedulerUtil.java View File

8
 import com.xxl.job.admin.dao.IXxlJobInfoDao;
8
 import com.xxl.job.admin.dao.IXxlJobInfoDao;
9
 import com.xxl.job.admin.dao.IXxlJobLogDao;
9
 import com.xxl.job.admin.dao.IXxlJobLogDao;
10
 import com.xxl.job.admin.dao.IXxlJobRegistryDao;
10
 import com.xxl.job.admin.dao.IXxlJobRegistryDao;
11
+import com.xxl.job.core.util.IpUtil;
11
 import org.quartz.*;
12
 import org.quartz.*;
12
 import org.quartz.Trigger.TriggerState;
13
 import org.quartz.Trigger.TriggerState;
13
 import org.quartz.impl.matchers.GroupMatcher;
14
 import org.quartz.impl.matchers.GroupMatcher;
35
 		DynamicSchedulerUtil.scheduler = scheduler;
36
 		DynamicSchedulerUtil.scheduler = scheduler;
36
 	}
37
 	}
37
     
38
     
38
-    // trigger callback port
39
+    // trigger callback address
40
+    private String callBackIp;
39
     private int callBackPort = 8888;
41
     private int callBackPort = 8888;
42
+    private static String callbackAddress;
43
+
44
+    public void setCallBackIp(String callBackIp) {
45
+        this.callBackIp = callBackIp;
46
+    }
40
     public void setCallBackPort(int callBackPort) {
47
     public void setCallBackPort(int callBackPort) {
41
 		this.callBackPort = callBackPort;
48
 		this.callBackPort = callBackPort;
42
 	}
49
 	}
43
-    
50
+    public static String getCallbackAddress(){
51
+        return callbackAddress;
52
+    }
53
+
44
     // init
54
     // init
45
     XxlJobLogCallbackServer xxlJobLogCallbackServer = null;
55
     XxlJobLogCallbackServer xxlJobLogCallbackServer = null;
46
     public void init(){
56
     public void init(){
52
 			e.printStackTrace();
62
 			e.printStackTrace();
53
 		}
63
 		}
54
 
64
 
65
+		// init callbackAddress
66
+        if (callBackIp!=null && callBackIp.trim().length()>0) {
67
+            callbackAddress = callBackIp.trim().concat(":").concat(String.valueOf(callBackPort));
68
+        } else {
69
+            callbackAddress = IpUtil.getIpPort(callBackPort);;
70
+        }
71
+
55
 		// init JobRegistryHelper
72
 		// init JobRegistryHelper
56
         JobRegistryHelper.discover("g", "k");
73
         JobRegistryHelper.discover("g", "k");
57
     }
74
     }

+ 4 - 0
xxl-job-admin/src/main/resources/applicationcontext-xxl-job.xml View File

4
 	   xsi:schemaLocation="http://www.springframework.org/schema/beans
4
 	   xsi:schemaLocation="http://www.springframework.org/schema/beans
5
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
5
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
6
 
6
 
7
+	<!-- quartz-调度器 -->
7
 	<bean id="quartzScheduler" lazy-init="false" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
8
 	<bean id="quartzScheduler" lazy-init="false" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
8
 		<property name="dataSource" ref="dataSource" />
9
 		<property name="dataSource" ref="dataSource" />
9
         <property name="autoStartup" value="true" />	<!--自动启动 -->
10
         <property name="autoStartup" value="true" />	<!--自动启动 -->
16
 	<bean id="dynamicSchedulerUtil" class="com.xxl.job.admin.core.util.DynamicSchedulerUtil" init-method="init" destroy-method="destroy" >
17
 	<bean id="dynamicSchedulerUtil" class="com.xxl.job.admin.core.util.DynamicSchedulerUtil" init-method="init" destroy-method="destroy" >
17
 		<!-- (轻易不要变更“调度器名称”, 任务创建时会绑定该“调度器名称”) -->
18
 		<!-- (轻易不要变更“调度器名称”, 任务创建时会绑定该“调度器名称”) -->
18
         <property name="scheduler" ref="quartzScheduler"/>
19
         <property name="scheduler" ref="quartzScheduler"/>
20
+		<!-- 调度中心回调IP[选填],为空则自动获取 -->
21
+		<property name="callBackIp" value=""/>
22
+		<!-- 调度中心回调端口号 -->
19
         <property name="callBackPort" value="8888"/>
23
         <property name="callBackPort" value="8888"/>
20
     </bean>
24
     </bean>
21
 
25
 

+ 14 - 1
xxl-job-core/src/main/java/com/xxl/job/core/executor/jetty/XxlJobExecutor.java View File

26
 public class XxlJobExecutor implements ApplicationContextAware {
26
 public class XxlJobExecutor implements ApplicationContextAware {
27
     private static final Logger logger = LoggerFactory.getLogger(XxlJobExecutor.class);
27
     private static final Logger logger = LoggerFactory.getLogger(XxlJobExecutor.class);
28
 
28
 
29
+    private String ip;
29
     private int port = 9999;
30
     private int port = 9999;
30
     private String appName;
31
     private String appName;
31
     private RegistHelper registHelper;
32
     private RegistHelper registHelper;
33
+
34
+    public void setIp(String ip) {
35
+        this.ip = ip;
36
+    }
32
     public void setPort(int port) {
37
     public void setPort(int port) {
33
         this.port = port;
38
         this.port = port;
34
     }
39
     }
94
             public void run() {
99
             public void run() {
95
                 while (true) {
100
                 while (true) {
96
                     try {
101
                     try {
97
-                        String address = IpUtil.getIpPort(port);
102
+
103
+                        // generate addredd = ip:port
104
+                        String address = null;
105
+                        if (ip != null && ip.trim().length()>0) {
106
+                            address = ip.trim().concat(":").concat(String.valueOf(port));
107
+                        } else {
108
+                            address = IpUtil.getIpPort(port);
109
+                        }
110
+
98
                         registHelper.registry(RegistHelper.RegistType.EXECUTOR.name(), appName, address);
111
                         registHelper.registry(RegistHelper.RegistType.EXECUTOR.name(), appName, address);
99
                         TimeUnit.SECONDS.sleep(RegistHelper.TIMEOUT);
112
                         TimeUnit.SECONDS.sleep(RegistHelper.TIMEOUT);
100
                     } catch (Exception e) {
113
                     } catch (Exception e) {

+ 2 - 0
xxl-job-executor-example/src/main/resources/applicationcontext-xxl-job.xml View File

14
 
14
 
15
 	<!-- 配置02、执行器 -->
15
 	<!-- 配置02、执行器 -->
16
 	<bean id="xxlJobExecutor" class="com.xxl.job.core.executor.jetty.XxlJobExecutor" init-method="start" destroy-method="destroy" >
16
 	<bean id="xxlJobExecutor" class="com.xxl.job.core.executor.jetty.XxlJobExecutor" init-method="start" destroy-method="destroy" >
17
+		<!-- 执行器IP[选填],为空则自动获取 -->
18
+		<property name="ip" value="" />
17
 		<!-- 执行器端口号 -->
19
 		<!-- 执行器端口号 -->
18
 		<property name="port" value="9999" />
20
 		<property name="port" value="9999" />
19
         <property name="appName" value="xxl-job-executor-example" />
21
         <property name="appName" value="xxl-job-executor-example" />