diff --git a/monitor-service-switch/src/main/java/com/monitor/switchs/NginxSwitchCtrl.java b/monitor-service-switch/src/main/java/com/monitor/switchs/NginxSwitchCtrl.java index 1fd89d2..9d153b2 100644 --- a/monitor-service-switch/src/main/java/com/monitor/switchs/NginxSwitchCtrl.java +++ b/monitor-service-switch/src/main/java/com/monitor/switchs/NginxSwitchCtrl.java @@ -25,6 +25,9 @@ import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; /** @@ -38,6 +41,10 @@ public class NginxSwitchCtrl { private long sleepTime=10*1000L; + private volatile AtomicInteger valueCount=new AtomicInteger(1); + + private Map<String,BaseResponse> switchLbResponseMap=new ConcurrentHashMap<>(); + @Value("${system.envi}") private String env; @@ -45,6 +52,19 @@ public class NginxSwitchCtrl { HostInfoMapper hostInfoMapper; /** + * 切换lb结果查询 + */ + @RequestMapping(value = "getLbSwitchResult") + @ResponseBody + public BaseResponse getLbSwitchResult(String rtnID) { + Set<String> nowIDset=switchLbResponseMap.keySet(); + List<String> ids=Lists.newArrayList(rtnID.split(",")); + if(nowIDset.containsAll(ids)){ + return new BaseResponse(); + } + return new BaseResponse(201,"not finished"); + } + /** * 切换lb的权重 * cloudName 源lb * target 目标nginx @@ -71,19 +91,54 @@ public class NginxSwitchCtrl { } Map<String,List<String>> innerListenerMap=getLbListerner(true); Map<String,List<String>> outerListenerMap=getLbListerner(false); + String ts=String.valueOf(new Date().getTime()); + String rtnID=""; for(LbModel lb:lbList){ + if(rtnID.length()>0){ + rtnID += ","; + } + rtnID += (ts+"-"+valueCount.getAndIncrement()); + //beginSwitchLb(rtnID,targetMap,lb,innerListenerMap,outerListenerMap); + startRunAsySwitchLb(rtnID,targetMap,lb,innerListenerMap,outerListenerMap); + } + BaseResponse response= new BaseResponse(); + response.setData(rtnID); + return response; + } + + private BaseResponse beginSwitchLb(String rtnID,Map<String,Integer> targetMap,LbModel lb,Map<String,List<String>> innerListenerMap,Map<String,List<String>> outerListenerMap){ + logger.info(" beginSwitchLb lb {} ,rtnID {}",lb,rtnID); + BaseResponse rtnBasResponse=null; + try{ if(lb.isClbFlag()){ - switchClb(targetMap,lb); + rtnBasResponse= switchClb(targetMap,lb); }else { Map<String, List<String>> listenerMap = outerListenerMap; if (lb.isInnerFlag()) { listenerMap = innerListenerMap; } - switchAlb(listenerMap,targetMap,lb); + rtnBasResponse= switchAlb(listenerMap,targetMap,lb); } - + }catch (Exception e){ + logger.error("beginSwitchLb error {}",e); } - return new BaseResponse(); + if(rtnBasResponse==null){ + rtnBasResponse = new BaseResponse(201,"switch lb error"); + } + switchLbResponseMap.put(rtnID,rtnBasResponse); + return rtnBasResponse; + } + + /** + * 发起异步调用 + */ + private void startRunAsySwitchLb(String rtnID,Map<String,Integer> targetMap,LbModel lb,Map<String,List<String>> innerListenerMap,Map<String,List<String>> outerListenerMap){ + CompletableFuture.runAsync(new Runnable() { + @Override + public void run() { + beginSwitchLb(rtnID,targetMap,lb,innerListenerMap,outerListenerMap); + } + }); } /**