+++ /dev/null
-/**\r
-* Copyright (C) 2016 ZTE, Inc. and others. All rights reserved. (ZTE)\r
-*\r
-* Licensed under the Apache License, Version 2.0 (the "License");\r
-* you may not use this file except in compliance with the License.\r
-* You may obtain a copy of the License at\r
-*\r
-* http://www.apache.org/licenses/LICENSE-2.0\r
-*\r
-* Unless required by applicable law or agreed to in writing, software\r
-* distributed under the License is distributed on an "AS IS" BASIS,\r
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
-* See the License for the specific language governing permissions and\r
-* limitations under the License.\r
-*/\r
-\r
-package org.openo.msb.wrapper;\r
-\r
-import java.util.Set;\r
-\r
-import org.apache.commons.lang3.StringUtils;\r
-import org.openo.msb.api.MicroServiceFullInfo;\r
-import org.openo.msb.api.MicroServiceInfo;\r
-import org.openo.msb.api.Node;\r
-import org.openo.msb.api.NodeInfo;\r
-import org.openo.msb.api.exception.ExtendedInternalServerErrorException;\r
-import org.openo.msb.api.exception.ExtendedNotFoundException;\r
-import org.openo.msb.api.exception.ExtendedNotSupportedException;\r
-import org.openo.msb.wrapper.util.MicroServiceDB;\r
-import org.openo.msb.wrapper.util.RegExpTestUtil;\r
-import org.openo.msb.wrapper.util.RouteUtil;\r
-import org.slf4j.Logger;\r
-import org.slf4j.LoggerFactory;\r
-\r
-public class MicroServiceWrapper {\r
-\r
- private static final Logger LOGGER = LoggerFactory.getLogger(MicroServiceWrapper.class);\r
-\r
- private static MicroServiceWrapper instance = new MicroServiceWrapper();\r
-\r
-\r
- private MicroServiceWrapper() {}\r
-\r
- public static MicroServiceWrapper getInstance() {\r
- return instance;\r
- }\r
-\r
-\r
- /**\r
- * @Title: getAllMicroServiceInstances\r
- * @Description: getAllMicroServiceInstances\r
- * @param: @return\r
- * @return: Response\r
- * @throws Exception\r
- */\r
- public MicroServiceFullInfo[] getAllMicroServiceInstances(){\r
-\r
- try {\r
- return MicroServiceDB.getInstance().getAllMicroServiceInstances();\r
-\r
- } catch (Exception e) {\r
- throw new ExtendedInternalServerErrorException(e.getMessage());\r
- }\r
-\r
- }\r
-\r
- /**\r
- * @Title: getMicroServiceInstance\r
- * @Description: (getMicroServiceInstance)\r
- * @param: @param serviceName\r
- * @param: @param version\r
- * @param: @return\r
- * @return: ApiRouteInfo\r
- */\r
- public MicroServiceFullInfo getMicroServiceInstance(String serviceName, String version,String serverPort) {\r
- if("null".equals(version)) {\r
- version="";\r
- }\r
- serviceName=serviceName.replace("*", "/");\r
- \r
- if (StringUtils.isBlank(serviceName)) {\r
- throw new ExtendedNotSupportedException("serviceName can't be empty");\r
- }\r
-\r
- if (StringUtils.isNotBlank(version)) {\r
- if (!RegExpTestUtil.versionRegExpTest(version)) {\r
- throw new ExtendedNotSupportedException("version (" + version\r
- + ") is not a valid format");\r
- }\r
- }\r
-\r
- MicroServiceFullInfo microServiceInfo;\r
- try {\r
- microServiceInfo =\r
- MicroServiceDB.getInstance().getMicroServiceInstance(serviceName, version,serverPort);\r
-\r
- } catch (Exception e) {\r
- throw new ExtendedInternalServerErrorException(e.getMessage());\r
- }\r
-\r
- if (null == microServiceInfo) {\r
- String errInfo =\r
- "microservice not found: serviceName-" + serviceName + ",version-" + version;\r
- LOGGER.warn(errInfo);\r
- throw new ExtendedNotFoundException(errInfo);\r
-\r
- }\r
-\r
- return microServiceInfo;\r
- }\r
-\r
-\r
-\r
- /**\r
- * @Title: updateMicroServiceInstance\r
- * @Description: updateMicroServiceInstance\r
- * @param: serviceName\r
- * @param: version\r
- * @param: microServiceInfo\r
- * @return: RouteResult\r
- */\r
- public synchronized MicroServiceFullInfo updateMicroServiceInstance(String serviceName,\r
- String version, MicroServiceInfo microServiceInfo) {\r
- if("null".equals(version)) {\r
- version="";\r
- }\r
- serviceName=serviceName.replace("*", "/");\r
-\r
- try {\r
- \r
- \r
- MicroServiceFullInfo oldService= getMicroServiceInstance(serviceName,version,"");\r
-\r
- // Delete the original record\r
- MicroServiceDB.getInstance().deleteMicroService(serviceName, version,"");\r
- // Notify the listeners\r
- MicroServiceDB.getInstance().noticeApiListener(oldService, "DELETE","");\r
- // Save the new record\r
- MicroServiceDB.getInstance().saveMicroServiceInfo2Redis(microServiceInfo,"");\r
- \r
- MicroServiceDB.getInstance().noticeApiListener(microServiceInfo, "ADD","");\r
- MicroServiceFullInfo newMicroServiceInfo =\r
- MicroServiceDB.getInstance().getMicroServiceInstance(\r
- microServiceInfo.getServiceName(), microServiceInfo.getVersion(),"");\r
- return newMicroServiceInfo;\r
- } catch (Exception e) {\r
- LOGGER.error("update MicroService throw exception", e);\r
- throw new ExtendedInternalServerErrorException(e.getMessage());\r
- }\r
-\r
-\r
- }\r
-\r
- public synchronized MicroServiceFullInfo updateMicroServiceNode(String serviceName,\r
- String version, String ip,String port, int ttl) {\r
- if("null".equals(version)) {\r
- version="";\r
- }\r
- serviceName=serviceName.replace("*", "/");\r
- \r
- if (StringUtils.isBlank(serviceName)) {\r
- throw new ExtendedNotSupportedException(\r
- "update MicroService Node FAIL:serviceName can't be empty");\r
- }\r
-\r
- if (StringUtils.isNotBlank(version)) {\r
- if (!RegExpTestUtil.versionRegExpTest(version)) {\r
- throw new ExtendedNotSupportedException(\r
- "update MicroService Node FAIL:version is not a valid format");\r
- }\r
- }\r
-\r
- if (!RegExpTestUtil.ipRegExpTest(ip)) {\r
- throw new ExtendedNotSupportedException("update MicroService Node FAIL:ip(" + ip\r
- + ")is not a valid IP address");\r
- }\r
- \r
- if (!RegExpTestUtil.portRegExpTest(port)) {\r
- throw new ExtendedNotSupportedException("update MicroService Node FAIL:port(" + port\r
- + ")is not a valid Port address");\r
- }\r
- \r
- try {\r
-\r
- MicroServiceDB.getInstance().updateMicroServiceNode2Redis(serviceName, version, ip,port,ttl);\r
-\r
- MicroServiceFullInfo newMicroServiceInfo =\r
- MicroServiceDB.getInstance().getMicroServiceInstance(serviceName, version,"");\r
-\r
- return newMicroServiceInfo;\r
- } catch (NullPointerException e) {\r
- throw new ExtendedNotFoundException(e.getMessage());\r
- } catch (Exception e) {\r
- LOGGER.error("update MicroServiceNode throw exception", e);\r
- throw new ExtendedInternalServerErrorException(e.getMessage());\r
- }\r
- }\r
-\r
- /**\r
- * @Title updateMicroServiceStatus\r
- * @Description updateMicroServiceStatus\r
- * @param serviceName\r
- * @param version\r
- * @param status\r
- * @return\r
- * @return RouteResult\r
- */\r
- \r
- public synchronized MicroServiceFullInfo updateMicroServiceStatus(String serviceName, String version,\r
- String status) {\r
-\r
- if ("null".equals(version)) {\r
- version = "";\r
- }\r
- serviceName=serviceName.replace("*", "/");\r
-\r
- if (StringUtils.isBlank(serviceName)) {\r
- throw new ExtendedNotSupportedException(\r
- "update MicroService status FAIL:serviceName can't be empty");\r
- }\r
-\r
- if (StringUtils.isNotBlank(version)) {\r
- if (!RegExpTestUtil.versionRegExpTest(version)) {\r
- throw new ExtendedNotSupportedException(\r
- "update MicroService status FAIL:version is not a valid format");\r
- }\r
- }\r
- \r
- if(!"0".equals(status) && !"2".equals(status) && !"1".equals(status)){\r
-\r
- throw new ExtendedNotSupportedException("update MicroService status FAIL:status is wrong");\r
- }\r
- \r
- \r
- try {\r
-\r
- MicroServiceDB.getInstance().updateMicroServiceStatus(serviceName, version, status);\r
-\r
- MicroServiceFullInfo newMicroServiceInfo =\r
- MicroServiceDB.getInstance().getMicroServiceInstance(serviceName, version,"");\r
- \r
- // Notify the listeners\r
- MicroServiceDB.getInstance().noticeUpdateStatusListener(newMicroServiceInfo, status);\r
-\r
-\r
- return newMicroServiceInfo;\r
- } catch (NullPointerException e) {\r
- throw new ExtendedNotFoundException(e.getMessage());\r
- } catch (Exception e) {\r
- LOGGER.error("update MicroServiceNode throw exception", e);\r
- throw new ExtendedInternalServerErrorException(e.getMessage());\r
- }\r
- \r
-\r
- }\r
-\r
-\r
- public synchronized MicroServiceFullInfo saveMicroServiceInstance(\r
- MicroServiceInfo microServiceInfo, boolean createOrUpdate,String requestIP,String serverPort) {\r
- // 保存数据格式判断\r
-\r
- if (StringUtils.isBlank(microServiceInfo.getServiceName())\r
- || StringUtils.isBlank(microServiceInfo.getProtocol())\r
- || microServiceInfo.getNodes().size() == 0) {\r
- throw new ExtendedNotSupportedException(\r
- "register MicroServiceInfo FAIL: Some required fields are empty");\r
- }\r
-\r
- for (Node node : microServiceInfo.getNodes()) {\r
- \r
- if(node.getIp()==null || node.getIp().isEmpty()){\r
- node.setIp(requestIP);\r
- }\r
- else if (!RegExpTestUtil.ipRegExpTest(node.getIp())) {\r
- throw new ExtendedNotSupportedException("register MicroServiceInfo FAIL:IP("\r
- + node.getIp() + ")is not a valid ip address");\r
- }\r
- \r
- if (!RegExpTestUtil.portRegExpTest(node.getPort())) {\r
- throw new ExtendedNotSupportedException("register MicroServiceInfo FAIL:Port("\r
- + node.getPort() + ")is not a valid Port address");\r
- }\r
- }\r
-\r
- if (StringUtils.isNotBlank(microServiceInfo.getVersion())) {\r
- if (!RegExpTestUtil.versionRegExpTest(microServiceInfo.getVersion())) {\r
- throw new ExtendedNotSupportedException(\r
- "register MicroServiceInfo FAIL:version is not a valid format");\r
-\r
- }\r
- }\r
-\r
- if (StringUtils.isNotBlank(microServiceInfo.getUrl().trim())) {\r
- if (!RegExpTestUtil.urlRegExpTest(microServiceInfo.getUrl())) {\r
- throw new ExtendedNotSupportedException(\r
- "register MicroServiceInfo FAIL:url is not a valid format(url must be begin with /)");\r
-\r
- }\r
- }\r
-\r
-\r
- if (RouteUtil.PROTOCOL_LIST.indexOf(microServiceInfo.getProtocol().trim()) == -1) {\r
- throw new ExtendedNotSupportedException(\r
- "register MicroServiceInfo FAIL:Protocol is wrong,value range:("\r
- + RouteUtil.PROTOCOL_LIST + ")");\r
- }\r
-\r
- MicroServiceFullInfo existingMicroServiceInfo;\r
- try {\r
- //To determine whether a service already exists\r
- existingMicroServiceInfo =\r
- MicroServiceDB.getInstance().getMicroServiceInstance(\r
- microServiceInfo.getServiceName().trim(), microServiceInfo.getVersion().trim(),serverPort);\r
-\r
- MicroServiceFullInfo newMicroServiceInfo ;\r
- if (existingMicroServiceInfo != null) {\r
- //a service already exists\r
-\r
- if (!existingMicroServiceInfo.getProtocol().equals(microServiceInfo.getProtocol())) {\r
- throw new ExtendedNotSupportedException(\r
- "MicroServiceInfo with different protocols and same serviceName is already existing");\r
- }\r
-\r
- if (createOrUpdate == false) {\r
- //After the first remove added\r
- MicroServiceDB.getInstance().deleteMicroService(\r
- microServiceInfo.getServiceName(), microServiceInfo.getVersion(),serverPort);\r
-\r
- MicroServiceDB.getInstance().saveMicroServiceInfo2Redis(microServiceInfo,serverPort);\r
- \r
- } else {\r
- //Add the original record and save directly\r
- MicroServiceDB.getInstance().saveMicroServiceInfo2Redis(microServiceInfo,serverPort);\r
- }\r
- \r
- newMicroServiceInfo =\r
- MicroServiceDB.getInstance().getMicroServiceInstance(\r
- microServiceInfo.getServiceName(), microServiceInfo.getVersion(),serverPort);\r
-\r
- //Notify the listeners\r
- MicroServiceDB.getInstance().noticeUpdateApiListener(microServiceInfo.getServiceName(),microServiceInfo.getVersion(),newMicroServiceInfo,serverPort);\r
-\r
- } else {\r
- //Save the new record\r
- MicroServiceDB.getInstance().saveMicroServiceInfo2Redis(microServiceInfo,serverPort);\r
- //Notify the listeners\r
- MicroServiceDB.getInstance().noticeApiListener(microServiceInfo, "ADD",serverPort);\r
- newMicroServiceInfo =\r
- MicroServiceDB.getInstance().getMicroServiceInstance(\r
- microServiceInfo.getServiceName(), microServiceInfo.getVersion(),serverPort);\r
- }\r
-\r
- \r
-\r
- return newMicroServiceInfo;\r
-\r
- } catch (ExtendedNotSupportedException e) {\r
- throw e;\r
- } catch (Exception e) {\r
- throw new ExtendedInternalServerErrorException(e.getMessage());\r
- }\r
-\r
- }\r
- \r
- \r
- public synchronized void deleteMicroService(String serviceName, String version) {\r
- if("null".equals(version)) {\r
- version="";\r
- }\r
- serviceName=serviceName.replace("*", "/");\r
- \r
- if (StringUtils.isBlank(serviceName)) {\r
- throw new ExtendedNotSupportedException(\r
- "delete MicroServiceInfo FAIL:serviceName can't be empty");\r
- }\r
-\r
- if (StringUtils.isNotBlank(version)) {\r
- if (!RegExpTestUtil.versionRegExpTest(version)) {\r
- throw new ExtendedNotSupportedException(\r
- "delete MicroServiceInfo FAIL:version is not a valid format");\r
-\r
- }\r
- }\r
-\r
- try {\r
-\r
- MicroServiceFullInfo microServiceInfo =\r
- MicroServiceDB.getInstance().getMicroServiceInstance(serviceName, version,"");\r
-\r
- if (microServiceInfo == null) {\r
- LOGGER.warn("serviceName-"+ serviceName + ",version-" + version + " not fond ");\r
- return;\r
- }\r
-\r
- MicroServiceDB.getInstance().deleteMicroService(serviceName, version,"");\r
- //Notify the listeners\r
- MicroServiceDB.getInstance().noticeApiListener(microServiceInfo, "DELETE","");\r
- \r
- } catch (Exception e) {\r
- LOGGER.error("delete MicroServiceInfo throw exception", e);\r
- throw new ExtendedInternalServerErrorException(e.getMessage());\r
-\r
- }\r
- \r
- LOGGER.info("delete MicroServiceInfo success:serviceName-"\r
- + serviceName + ",version-" + version );\r
-\r
- }\r
-\r
-\r
- public synchronized void deleteMicroService(String serviceName, String version,String serverPort) {\r
- if("null".equals(version)) {\r
- version="";\r
- }\r
- serviceName=serviceName.replace("*", "/");\r
- \r
- if (StringUtils.isBlank(serviceName)) {\r
- throw new ExtendedNotSupportedException(\r
- "delete MicroServiceInfo FAIL:serviceName can't be empty");\r
- }\r
-\r
- if (StringUtils.isNotBlank(version)) {\r
- if (!RegExpTestUtil.versionRegExpTest(version)) {\r
- throw new ExtendedNotSupportedException(\r
- "delete MicroServiceInfo FAIL:version is not a valid format");\r
-\r
- }\r
- }\r
-\r
- try {\r
-\r
- MicroServiceFullInfo microServiceInfo =\r
- MicroServiceDB.getInstance().getMicroServiceInstance(serviceName, version,serverPort);\r
-\r
- if (microServiceInfo == null) {\r
- throw new ExtendedNotFoundException("delete MicroServiceInfo FAIL:serviceName-"\r
- + serviceName + ",version-" + version + " not fond ");\r
- }\r
-\r
- MicroServiceDB.getInstance().deleteMicroService(serviceName, version,serverPort);\r
- //Notify the listeners\r
- MicroServiceDB.getInstance().noticeApiListener(microServiceInfo, "DELETE",serverPort);\r
- } catch (ExtendedNotFoundException e) {\r
- throw e;\r
- } catch (Exception e) {\r
- LOGGER.error("delete MicroServiceInfo throw exception", e);\r
- throw new ExtendedInternalServerErrorException(e.getMessage());\r
-\r
- }\r
- \r
- LOGGER.info("delete MicroServiceInfo success:serviceName-"\r
- + serviceName + ",version-" + version );\r
-\r
- }\r
-\r
- public synchronized void deleteMicroServiceInstance(String serviceName, String version,\r
- String ip,String port) {\r
- if("null".equals(version)) {\r
- version="";\r
- }\r
- serviceName=serviceName.replace("*", "/");\r
- \r
- if (StringUtils.isBlank(serviceName)) {\r
- throw new ExtendedNotSupportedException(\r
- "delete MicroServiceInfo FAIL:serviceName can't be empty");\r
- }\r
-\r
- if (StringUtils.isNotBlank(version)) {\r
- if (!RegExpTestUtil.versionRegExpTest(version)) {\r
- throw new ExtendedNotSupportedException(\r
- "delete MicroServiceInfo FAIL:version is not a valid format");\r
- }\r
- }\r
-\r
- if (!RegExpTestUtil.ipRegExpTest(ip)) {\r
- throw new ExtendedNotSupportedException("delete MicroServiceInfo FAIL:IP(" + ip\r
- + ")is not a valid IP address");\r
- }\r
- \r
- if (!RegExpTestUtil.portRegExpTest(port)) {\r
- throw new ExtendedNotSupportedException("delete MicroServiceInfo FAIL:Port(" + port\r
- + ")is not a valid Port address");\r
- }\r
-\r
-\r
- try {\r
- MicroServiceFullInfo microServiceInfo =\r
- MicroServiceDB.getInstance().getMicroServiceInstance(serviceName, version,"");\r
-\r
- if (microServiceInfo == null) {\r
- throw new ExtendedNotFoundException("delete MicroServiceInfo FAIL:serviceName-"\r
- + serviceName + ",version-" + version + " not fond ");\r
- }\r
-\r
- Set<NodeInfo> nodes = microServiceInfo.getNodes();\r
-\r
- boolean ifFindBNode = false;\r
-\r
- for (Node node : nodes) {\r
- if (node.getIp().equals(ip) && node.getPort().equals(port)) {\r
- ifFindBNode = true;\r
- nodes.remove(node);\r
-\r
- if (nodes.isEmpty()) {\r
- //delete MicroService\r
- MicroServiceDB.getInstance().deleteMicroService(serviceName, version,"");\r
- //Notify the listeners\r
- MicroServiceDB.getInstance().noticeApiListener(microServiceInfo, "DELETE","");\r
- } else {\r
- //delete Node\r
- MicroServiceDB.getInstance().deleteNode(serviceName, version, ip,port);\r
- MicroServiceDB.getInstance().noticeUpdateApiListener(serviceName, version,microServiceInfo,"");\r
- }\r
-\r
- break;\r
- }\r
- }\r
-\r
- if (!ifFindBNode) {\r
- throw new ExtendedNotFoundException("delete MicroServiceInfo FAIL: node-" + ip+":"+port\r
- + " not fond ");\r
- }\r
-\r
-\r
- } catch (ExtendedNotFoundException e) {\r
- throw e;\r
- } catch (Exception e) {\r
- LOGGER.error("deleteApiRoute throw exception", e);\r
- throw new ExtendedInternalServerErrorException(e.getMessage());\r
-\r
- }\r
-\r
- }\r
-\r
-\r
-}\r