Commit 0f2dbd02 by huangfusuper

解决多网卡获取IP问题 解决补批BUG

parent 9cf28fea
...@@ -172,6 +172,18 @@ public class ApiFlowController { ...@@ -172,6 +172,18 @@ public class ApiFlowController {
return ResponseResult.ok("SUCCESS"); return ResponseResult.ok("SUCCESS");
} }
/**
* 补批工作流
*
* @param repairFlow
* @return
*/
@PostMapping("/repairFlow")
@ApiOperation("补批工作流")
public ResponseResult repairFlow(@RequestBody RepairFlow repairFlow) {
apiFlowService.repairFlow(repairFlow);
return ResponseResult.ok("SUCCESS");
}
/** /**
* 获取整体运行的统计数据 * 获取整体运行的统计数据
......
...@@ -74,6 +74,7 @@ public interface ApiFlowService { ...@@ -74,6 +74,7 @@ public interface ApiFlowService {
*/ */
void repairJob(String param); void repairJob(String param);
void repairFlow(RepairFlow repairFlow);
/** /**
* 加载运行日志 * 加载运行日志
......
...@@ -10,6 +10,7 @@ import com.byit.dto.api.DeleteDto; ...@@ -10,6 +10,7 @@ import com.byit.dto.api.DeleteDto;
import com.byit.dto.executor.RunParamWrapped; import com.byit.dto.executor.RunParamWrapped;
import com.byit.dto.plugin.*; import com.byit.dto.plugin.*;
import com.byit.dto.specials.RepairFlow; import com.byit.dto.specials.RepairFlow;
import com.byit.dto.specials.RepairTimeParam;
import com.byit.enums.*; import com.byit.enums.*;
import com.byit.enums.plugin.PluginNodeTypeEnum; import com.byit.enums.plugin.PluginNodeTypeEnum;
import com.byit.job.utils.CronExpression; import com.byit.job.utils.CronExpression;
...@@ -1282,6 +1283,87 @@ public class ApiFlowServiceImpl implements ApiFlowService { ...@@ -1282,6 +1283,87 @@ public class ApiFlowServiceImpl implements ApiFlowService {
} }
} }
@Override
public void repairFlow(RepairFlow repairFlow) {
ValidationUtil.dataNotNull(repairFlow, "请求参数不允许为空!");
//获取工作空间名称
String workspaceName = repairFlow.getWorkspaceName();
ValidationUtil.dataNotBank(workspaceName, "工作空间名称不允许为空!");
//获取工作流名称
String flowName = repairFlow.getFlowName();
ValidationUtil.dataNotBank(flowName, "工作流名称不允许为空!");
List<String> nodeNameList = repairFlow.getNodeNames();
ValidationUtil.isTrueValidation(CollectionUtil.isEmpty(nodeNameList), "补批节点不允许为空!");
//获取补批的日期
List<RepairTimeParam> repairTimes = repairFlow.getRepairTimes();
List<String> repairTimeList = repairTimes.stream().map(RepairTimeParam::getRepairTime).collect(Collectors.toList());
ValidationUtil.isTrueValidation(CollectionUtil.isEmpty(repairTimeList), "补批日期不允许为空!");
String timeFormatName = repairFlow.getTimeFormatName();
ValidationUtil.dataNotBank(timeFormatName, "补批时间格式不允许为空!");
String nowDateTimeFormatName = repairFlow.getNowDateTimeFormatName();
ValidationUtil.dataNotBank(nowDateTimeFormatName, "nowDate时间格式不允许为空!");
//开始校验
Workspace workspace = workspaceMapper.getByName(workspaceName);
ValidationUtil.dataNotNull(workspace, workspaceName + "工作空间不存在");
Flow flow = flowMapper.getByWorkSpaceAndName(workspace.getWorkspaceId(), flowName);
ValidationUtil.dataNotNull(flow, flowName + "工作流不存在");
List<Node> nodeList = nodeMapper.findByFlowIdAndName(flow.getFlowId(), nodeNameList);
try {
RedissLockUtil.trlock(flow.getFlowId().toString(), 5);
//设置触发时间
Long triggerTime = System.currentTimeMillis();
Map<String, List<WaitingTask>> waitTaskMap = buildTask(nodeList, nodeNameList, repairTimeList, triggerTime, flowName,
timeFormatName, nowDateTimeFormatName);
//将时间排序
Collections.sort(repairTimeList);
//查看当前排队的工作流最大排队序号
Integer order = waitingRecordMapper.findOrderByFlowId(flow.getFlowId());
if (order == null) {
order = 0;
}
String userName = currentUserUtils.account();
for (String repairTime : repairTimeList) {
WaitingRecord waitingRecord = new WaitingRecord();
RunRecording runRecording = new RunRecording();
String runId = IDGenerationStrategy.runIdGenerationStrategy(serverPort);
//设置排期
BeanUtils.copyProperties(flow, waitingRecord);
waitingRecord.setFlowVersionName(flow.getVersionName());
waitingRecord.setRunId(runId);
waitingRecord.setFlowNodeCount(nodeList.size());
waitingRecord.setOperator(userName);
waitingRecord.setScheduleType(ScheduleTypeEnum.REPAIR.getCode());
waitingRecord.setRepeatTime(repairTime);
waitingRecord.setWaitOrder(++order);
//需要按着时间先后来设置时间
waitingRecord.setTriggerTime(System.currentTimeMillis());
//设置实例
BeanUtils.copyProperties(waitingRecord, runRecording);
runRecording.setFlowStatus("1");
runRecording.setTriggerTime(System.currentTimeMillis());
runRecording.setWorkspaceId(flow.getWorkspaceId());
Integer waitId = waitingRecordMapper.insertSelective(waitingRecord);
runRecordingMapper.saveRunRecording(runRecording);
List<WaitingTask> repairTaskList = waitTaskMap.get(repairTime);
repairTaskList.forEach(waitingTask -> {
waitingTask.setWaitId(waitingRecord.getWaitId());
waitingTaskMapper.insertSelective(waitingTask);
});
}
} catch (Exception e) {
e.printStackTrace();
} finally {
RedissLockUtil.unlock(flow.getFlowId().toString());
}
}
private Map<String, List<WaitingTask>> buildTask(List<Node> nodeList, List<String> nodeNameList, List<String> repairTimeList, private Map<String, List<WaitingTask>> buildTask(List<Node> nodeList, List<String> nodeNameList, List<String> repairTimeList,
Long triggerTime, String flowName, String timeFormatName, String nowDateTimeFormatName) { Long triggerTime, String flowName, String timeFormatName, String nowDateTimeFormatName) {
......
...@@ -143,6 +143,8 @@ public class JobUtils { ...@@ -143,6 +143,8 @@ public class JobUtils {
* 补批工作流 * 补批工作流
*/ */
public static final String REQUEST_REPAIRFLOW = "/api/operating/node/routineSupplementBatch"; public static final String REQUEST_REPAIRFLOW = "/api/operating/node/routineSupplementBatch";
public static final String REQUEST_REPAIRFLOW_COPY = "/api/flow/repairFlow";
/** /**
* 特殊的补批接口 * 特殊的补批接口
*/ */
...@@ -666,7 +668,7 @@ public class JobUtils { ...@@ -666,7 +668,7 @@ public class JobUtils {
* @return 结果 * @return 结果
*/ */
public static ResponseResult repairFlow(RepairFlow repairFlow) { public static ResponseResult repairFlow(RepairFlow repairFlow) {
String response = createHttpRequest(REQUEST_REPAIRFLOW, JSON.toJSONString(repairFlow, WriteClassName)); String response = createHttpRequest(REQUEST_REPAIRFLOW_COPY, JSON.toJSONString(repairFlow, WriteClassName));
log.debug("--------------------补批工作流接口调用成功,结果为:{}------------------------", response); log.debug("--------------------补批工作流接口调用成功,结果为:{}------------------------", response);
return JSON.parseObject(response, ResponseResult.class); return JSON.parseObject(response, ResponseResult.class);
} }
......
package com.byit.utils; package com.byit.utils;
import org.apache.commons.lang3.StringUtils;
import java.io.IOException; import java.io.IOException;
import java.net.Inet6Address; import java.net.Inet6Address;
import java.net.InetAddress; import java.net.InetAddress;
...@@ -22,21 +24,34 @@ public class IpUtil { ...@@ -22,21 +24,34 @@ public class IpUtil {
// ---------------------- valid ---------------------- // ---------------------- valid ----------------------
/** private static boolean isValidAddress(InetAddress address,String myIpPatternStr) {
* valid Inet4Address
*
* @param address
* @return
*/
private static boolean isValidAddress(InetAddress address) {
if (address == null || address.isLoopbackAddress()) { if (address == null || address.isLoopbackAddress()) {
return false; return false;
} }
boolean flag = true;
String name = address.getHostAddress(); String name = address.getHostAddress();
if(StringUtils.isNoneBlank(myIpPatternStr)) {
Pattern myIpPattern = Pattern.compile(myIpPatternStr);
flag = myIpPattern.matcher(name).matches();
}
return (name != null return (name != null
&& !ANYHOST.equals(name) && !ANYHOST.equals(name)
&& !LOCALHOST.equals(name) && !LOCALHOST.equals(name)
&& IP_PATTERN.matcher(name).matches()); && IP_PATTERN.matcher(name).matches())
&& flag;
}
/**
* valid Inet4Address
*
* @param address
* @return
*/
private static boolean isValidAddress(InetAddress address) {
return isValidAddress(address, null);
} }
/** /**
...@@ -90,6 +105,10 @@ public class IpUtil { ...@@ -90,6 +105,10 @@ public class IpUtil {
private static InetAddress getLocalAddress0() { private static InetAddress getLocalAddress0() {
return getLocalAddress0(null);
}
private static InetAddress getLocalAddress0(String preferredNetworks) {
InetAddress localAddress = null; InetAddress localAddress = null;
try { try {
localAddress = InetAddress.getLocalHost(); localAddress = InetAddress.getLocalHost();
...@@ -98,7 +117,7 @@ public class IpUtil { ...@@ -98,7 +117,7 @@ public class IpUtil {
if (isValidV6Address(address)){ if (isValidV6Address(address)){
return normalizeV6Address(address); return normalizeV6Address(address);
} }
} else if (isValidAddress(localAddress)) { } else if (isValidAddress(localAddress,preferredNetworks)) {
return localAddress; return localAddress;
} }
} catch (Throwable e) { } catch (Throwable e) {
...@@ -121,7 +140,7 @@ public class IpUtil { ...@@ -121,7 +140,7 @@ public class IpUtil {
if (isValidV6Address(v6Address)){ if (isValidV6Address(v6Address)){
return normalizeV6Address(v6Address); return normalizeV6Address(v6Address);
} }
} else if (isValidAddress(address)) { } else if (isValidAddress(address, preferredNetworks)) {
return address; return address;
} }
} catch (Throwable e) { } catch (Throwable e) {
...@@ -139,18 +158,32 @@ public class IpUtil { ...@@ -139,18 +158,32 @@ public class IpUtil {
} }
// ---------------------- tool ---------------------- public static void main(String[] args) {
InetAddress localAddress0 = getLocalAddress0();
String hostAddress = localAddress0.getHostAddress();
System.out.println(hostAddress);
}
// ---------------------- tool ----------------------
public static InetAddress getLocalAddress(){
return getLocalAddress(null);
}
/** /**
* Find first valid IP from local network card * 从本地网卡查找第一个有效IP
* *
* @return first valid local IP * @return 第一个有效的本地IP
*/ */
public static InetAddress getLocalAddress() { public static InetAddress getLocalAddress(String preferredNetworks) {
if (LOCAL_ADDRESS != null) { if (LOCAL_ADDRESS != null) {
return LOCAL_ADDRESS; return LOCAL_ADDRESS;
} }
InetAddress localAddress = getLocalAddress0(); InetAddress localAddress = null;
if(StringUtils.isNoneBlank(preferredNetworks)){
localAddress = getLocalAddress0();
}else{
localAddress = getLocalAddress0(preferredNetworks);
}
LOCAL_ADDRESS = localAddress; LOCAL_ADDRESS = localAddress;
return localAddress; return localAddress;
} }
...@@ -164,6 +197,10 @@ public class IpUtil { ...@@ -164,6 +197,10 @@ public class IpUtil {
return getLocalAddress().getHostAddress(); return getLocalAddress().getHostAddress();
} }
public static String getIp(String preferredNetworks){
return getLocalAddress(preferredNetworks).getHostAddress();
}
/** /**
* get ip:port * get ip:port
* *
......
...@@ -55,7 +55,7 @@ public abstract class PluginServerFactory { ...@@ -55,7 +55,7 @@ public abstract class PluginServerFactory {
public PluginServerFactory() { public PluginServerFactory() {
} }
public void init(int corePoolSize, int maxPoolSize,Integer port, String registryUrl, String env, String biz, public void init(int corePoolSize, int maxPoolSize,Integer port, String registryUrl, String env, String biz,String preferredNetworks,
Class<? extends PluginServiceRegistry> serviceRegistryClass, Class<? extends PluginServiceRegistry> serviceRegistryClass,
Class<? extends PluginServer> pluginServerClass, Class<? extends PluginServer> pluginServerClass,
Class<? extends RemainingOperationsCallBack> remainingOperationsCallBack){ Class<? extends RemainingOperationsCallBack> remainingOperationsCallBack){
...@@ -74,7 +74,7 @@ public abstract class PluginServerFactory { ...@@ -74,7 +74,7 @@ public abstract class PluginServerFactory {
}else{ }else{
this.env = DEFAULT_ENV_NAME; this.env = DEFAULT_ENV_NAME;
} }
this.ip = IpUtil.getIp(); this.ip = IpUtil.getIp(preferredNetworks);
if(port <= 0){ if(port <= 0){
this.port = 7060; this.port = 7060;
......
...@@ -44,7 +44,7 @@ public class RpcMainPluginServerFactory extends PluginServerFactory { ...@@ -44,7 +44,7 @@ public class RpcMainPluginServerFactory extends PluginServerFactory {
List<String> classNames = serviceConfigModel.getClassNames(); List<String> classNames = serviceConfigModel.getClassNames();
super.init(serverConfigurationModel.getCoreSize(),serverConfigurationModel.getMaxSize(), super.init(serverConfigurationModel.getCoreSize(),serverConfigurationModel.getMaxSize(),
serverConfigurationModel.getPort(), serverConfigurationModel.getRegistryUrl(), serverConfigurationModel.getPort(), serverConfigurationModel.getRegistryUrl(),
serverConfigurationModel.getServerEnv(), serverConfigurationModel.getServerBiz(), serverConfigurationModel.getServerEnv(), serverConfigurationModel.getServerBiz(),null,
pluginServiceRegistryClass,pluginServerClass,remainingOperationsClass); pluginServiceRegistryClass,pluginServerClass,remainingOperationsClass);
if (CollectionUtil.isNotEmpty(classNames)) { if (CollectionUtil.isNotEmpty(classNames)) {
......
...@@ -25,14 +25,20 @@ public class RpcSpringPluginServerFactory extends PluginServerFactory implements ...@@ -25,14 +25,20 @@ public class RpcSpringPluginServerFactory extends PluginServerFactory implements
private String biz; private String biz;
private String env; private String env;
private int port; private int port;
private String preferredNetworks;
private Map<String,String> taskNameExpand = new ConcurrentHashMap<>(8); private Map<String,String> taskNameExpand = new ConcurrentHashMap<>(8);
public RpcSpringPluginServerFactory(String address, String biz, String env, int port) { public RpcSpringPluginServerFactory(String address, String biz, String env, int port) {
this(address, biz, env, port, null);
}
public RpcSpringPluginServerFactory(String address, String biz, String env, int port, String preferredNetworks) {
this.address = address; this.address = address;
this.biz = biz; this.biz = biz;
this.env = env; this.env = env;
this.port = port; this.port = port;
this.preferredNetworks = preferredNetworks;
} }
@Override @Override
...@@ -42,7 +48,7 @@ public class RpcSpringPluginServerFactory extends PluginServerFactory implements ...@@ -42,7 +48,7 @@ public class RpcSpringPluginServerFactory extends PluginServerFactory implements
@Override @Override
public void afterPropertiesSet() throws Exception { public void afterPropertiesSet() throws Exception {
super.init(-1,-1,port,address,env,biz,null,null,null); super.init(-1,-1,port,address,env,biz,preferredNetworks,null,null,null);
super.start(); super.start();
} }
......
...@@ -34,8 +34,7 @@ public class PluginAutoConfigure { ...@@ -34,8 +34,7 @@ public class PluginAutoConfigure {
public RpcSpringPluginServerFactory pluginServerFactory(){ public RpcSpringPluginServerFactory pluginServerFactory(){
PluginConfigurationModel plugin = mythConfigModel.getPlugin(); PluginConfigurationModel plugin = mythConfigModel.getPlugin();
RegisteredConfigurationModel register = mythConfigModel.getRegister(); RegisteredConfigurationModel register = mythConfigModel.getRegister();
RpcSpringPluginServerFactory rpcSpringPluginServerFactory = RpcSpringPluginServerFactory rpcSpringPluginServerFactory = new RpcSpringPluginServerFactory(register.getUrl(),plugin.getBiz(),plugin.getEnv(),plugin.getPort());
new RpcSpringPluginServerFactory(register.getUrl(),plugin.getBiz(),plugin.getEnv(),plugin.getPort());
rpcSpringPluginServerFactory.setPluginServerClass(NettyPluginServer.class); rpcSpringPluginServerFactory.setPluginServerClass(NettyPluginServer.class);
return rpcSpringPluginServerFactory; return rpcSpringPluginServerFactory;
} }
......
...@@ -8,6 +8,8 @@ public class PluginConfigurationModel { ...@@ -8,6 +8,8 @@ public class PluginConfigurationModel {
private String env; private String env;
private String biz; private String biz;
private Integer port; private Integer port;
//网卡正则表达式
private String preferredNetworks;
public String getEnv() { public String getEnv() {
return env; return env;
...@@ -32,4 +34,12 @@ public class PluginConfigurationModel { ...@@ -32,4 +34,12 @@ public class PluginConfigurationModel {
public void setPort(Integer port) { public void setPort(Integer port) {
this.port = port; this.port = port;
} }
public String getPreferredNetworks() {
return preferredNetworks;
}
public void setPreferredNetworks(String preferredNetworks) {
this.preferredNetworks = preferredNetworks;
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment