2 * Copyright (C) 2016 ZTE, Inc. and others. All rights reserved. (ZTE)
\r
4 * Licensed under the Apache License, Version 2.0 (the "License");
\r
5 * you may not use this file except in compliance with the License.
\r
6 * You may obtain a copy of the License at
\r
8 * http://www.apache.org/licenses/LICENSE-2.0
\r
10 * Unless required by applicable law or agreed to in writing, software
\r
11 * distributed under the License is distributed on an "AS IS" BASIS,
\r
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
13 * See the License for the specific language governing permissions and
\r
14 * limitations under the License.
\r
17 package org.openo.msb.wrapper.serviceListener;
\r
19 import java.util.Set;
\r
21 import org.apache.commons.lang3.StringUtils;
\r
22 import org.openo.msb.api.ApiRouteInfo;
\r
23 import org.openo.msb.api.CustomRouteInfo;
\r
24 import org.openo.msb.api.IuiRouteInfo;
\r
25 import org.openo.msb.api.Node;
\r
26 import org.openo.msb.api.RouteServer;
\r
27 import org.openo.msb.api.Service;
\r
28 import org.openo.msb.wrapper.ApiRouteServiceWrapper;
\r
29 import org.openo.msb.wrapper.CustomRouteServiceWrapper;
\r
30 import org.openo.msb.wrapper.IuiRouteServiceWrapper;
\r
31 import org.openo.msb.wrapper.util.RegExpTestUtil;
\r
32 import org.openo.msb.wrapper.util.RouteUtil;
\r
33 import org.slf4j.Logger;
\r
34 import org.slf4j.LoggerFactory;
\r
37 public class MicroServiceChangeListener implements IMicroServiceChangeListener {
\r
39 private static final Logger LOGGER = LoggerFactory.getLogger(MicroServiceChangeListener.class);
\r
42 public void onSave(Service microServiceInfo,String serverPort) {
\r
44 if("UI".equals(microServiceInfo.getProtocol())){
\r
45 IuiRouteInfo iuiRouteInfo = this.buildIuiRouteInfo(microServiceInfo);
\r
46 if(null != iuiRouteInfo){
\r
47 IuiRouteServiceWrapper.getInstance().saveIuiRouteInstance(iuiRouteInfo);
\r
52 if(ifApiRouteUrl(microServiceInfo.getUrl())){
\r
53 ApiRouteInfo apiRouteInfo = this.buildApiRouteInfo(microServiceInfo);
\r
54 if(null != apiRouteInfo){
\r
55 ApiRouteServiceWrapper.getInstance().saveApiRouteInstance(apiRouteInfo,serverPort);
\r
59 CustomRouteInfo customRouteInfo = this.buildCustomRouteInfo(microServiceInfo);
\r
60 if(null != customRouteInfo){
\r
61 CustomRouteServiceWrapper.getInstance().saveCustomRouteInstance(customRouteInfo,serverPort);
\r
70 public void onChange(String serviceName, String version, Service microServiceInfo,String serverPort) {
\r
72 if("UI".equals(microServiceInfo.getProtocol())){
\r
73 if(serviceName.startsWith("iui_")||serviceName.startsWith("IUI_")){
\r
74 serviceName=serviceName.substring(4);
\r
76 IuiRouteInfo iuiRouteInfo = this.buildIuiRouteInfo(microServiceInfo);
\r
77 if(null != iuiRouteInfo){
\r
78 IuiRouteServiceWrapper.getInstance().updateIuiRouteInstance(serviceName, iuiRouteInfo);
\r
83 if(ifApiRouteUrl(microServiceInfo.getUrl())){
\r
84 ApiRouteInfo apiRouteInfo = this.buildApiRouteInfo(microServiceInfo);
\r
85 if(null != apiRouteInfo){
\r
86 ApiRouteServiceWrapper.getInstance().updateApiRouteInstance(serviceName, version, apiRouteInfo,serverPort);
\r
90 if(!serviceName.startsWith("/")){
\r
91 serviceName="/"+serviceName;
\r
93 CustomRouteInfo customRouteInfo = this.buildCustomRouteInfo(microServiceInfo);
\r
94 if(null != customRouteInfo){
\r
95 CustomRouteServiceWrapper.getInstance().updateCustomRouteInstance(serviceName,customRouteInfo,serverPort);
\r
103 public void onStatusChange(String serviceName,String url,String version,String protocol,String status) {
\r
104 if("UI".equals(protocol)){
\r
106 if(serviceName.startsWith("iui_")||serviceName.startsWith("IUI_")){
\r
107 serviceName=serviceName.substring(4);
\r
109 IuiRouteServiceWrapper.getInstance().updateIuiRouteStatus(serviceName, status);
\r
113 if(ifApiRouteUrl(url)){
\r
114 ApiRouteServiceWrapper.getInstance().updateApiRouteStatus(serviceName, version, status);
\r
117 if(!serviceName.startsWith("/")){
\r
118 serviceName="/"+serviceName;
\r
120 CustomRouteServiceWrapper.getInstance().updateCustomRouteStatus(serviceName, status);
\r
129 public void onDelete(String serviceName,String url, String version,String protocol,String serverPort) {
\r
131 if("UI".equals(protocol)){
\r
132 if(serviceName.startsWith("iui_")||serviceName.startsWith("IUI_")){
\r
133 serviceName=serviceName.substring(4);
\r
135 IuiRouteServiceWrapper.getInstance().deleteIuiRoute(serviceName, "*");
\r
139 if(ifApiRouteUrl(url)){
\r
140 ApiRouteServiceWrapper.getInstance().deleteApiRoute(serviceName, version, "*",serverPort);
\r
145 if(!serviceName.startsWith("/")){
\r
146 serviceName="/"+serviceName;
\r
149 CustomRouteServiceWrapper.getInstance().deleteCustomRoute(serviceName, "*",serverPort);
\r
156 * @Title ifApiRouteUrl
\r
157 * @Description TODO(According to judge whether the API registration URL format)
\r
162 private boolean ifApiRouteUrl(String url){
\r
163 return RegExpTestUtil.apiRouteUrlRegExpTest(url);
\r
168 * From MicroServiceInfo to ApiRouteInfo
\r
169 * @param microServiceInfo
\r
172 private ApiRouteInfo buildApiRouteInfo(Service microServiceInfo){
\r
174 ApiRouteInfo apiRouteInfo = new ApiRouteInfo();
\r
175 apiRouteInfo.setUrl(microServiceInfo.getUrl());
\r
177 Set<Node> nodes=microServiceInfo.getNodes();
\r
178 RouteServer[] routeServers=new RouteServer[nodes.size()];
\r
182 for(Node node:nodes){
\r
183 RouteServer routeServer = new RouteServer(node.getIp(),node.getPort());
\r
184 routeServers[i]=routeServer;
\r
189 apiRouteInfo.setServers(routeServers);
\r
190 String[] rangs=StringUtils.split(microServiceInfo.getVisualRange(), "|");
\r
191 if(RouteUtil.contain(rangs, "0")){
\r
192 apiRouteInfo.setVisualRange("0");
\r
195 apiRouteInfo.setVisualRange("1");
\r
199 if("ip_hash".equals(microServiceInfo.getLb_policy())){
\r
200 apiRouteInfo.setUseOwnUpstream("1");
\r
205 apiRouteInfo.setServiceName(microServiceInfo.getServiceName());
\r
206 apiRouteInfo.setVersion(microServiceInfo.getVersion());
\r
207 //TODO:set json and metrics defaultValue
\r
208 String version="".equals(microServiceInfo.getVersion())?"":"/"+microServiceInfo.getVersion();
\r
209 apiRouteInfo.setApiJson(microServiceInfo.getUrl()+"/swagger.json");
\r
210 apiRouteInfo.setMetricsUrl("/admin/metrics");
\r
211 return apiRouteInfo;
\r
216 * From MicroServiceInfo to CustomRouteInfo
\r
217 * @param microServiceInfo
\r
220 private CustomRouteInfo buildCustomRouteInfo(Service microServiceInfo){
\r
222 CustomRouteInfo customRouteInfo = new CustomRouteInfo();
\r
223 customRouteInfo.setUrl(microServiceInfo.getUrl());
\r
225 Set<Node> nodes=microServiceInfo.getNodes();
\r
226 RouteServer[] routeServers=new RouteServer[nodes.size()];
\r
230 for(Node node:nodes){
\r
231 RouteServer routeServer = new RouteServer(node.getIp(),node.getPort());
\r
232 routeServers[i]=routeServer;
\r
236 customRouteInfo.setServers(routeServers);
\r
237 String[] rangs=StringUtils.split(microServiceInfo.getVisualRange(), "|");
\r
238 if(RouteUtil.contain(rangs, "0")){
\r
239 customRouteInfo.setVisualRange("0");
\r
242 customRouteInfo.setVisualRange("1");
\r
245 if("ip_hash".equals(microServiceInfo.getLb_policy())){
\r
246 customRouteInfo.setUseOwnUpstream("1");
\r
249 String serviceName;
\r
250 if(!microServiceInfo.getServiceName().startsWith("/")){
\r
251 serviceName="/"+microServiceInfo.getServiceName();
\r
254 serviceName=microServiceInfo.getServiceName();
\r
256 customRouteInfo.setServiceName(serviceName);
\r
258 return customRouteInfo;
\r
263 * From MicroServiceInfo to IuiRouteInfo
\r
264 * @param microServiceInfo
\r
267 private IuiRouteInfo buildIuiRouteInfo(Service microServiceInfo){
\r
269 IuiRouteInfo iuiRouteInfo = new IuiRouteInfo();
\r
270 iuiRouteInfo.setUrl(microServiceInfo.getUrl());
\r
272 Set<Node> nodes=microServiceInfo.getNodes();
\r
273 RouteServer[] routeServers=new RouteServer[nodes.size()];
\r
277 for(Node node:nodes){
\r
278 RouteServer routeServer = new RouteServer(node.getIp(),node.getPort());
\r
279 routeServers[i]=routeServer;
\r
283 iuiRouteInfo.setServers(routeServers);
\r
284 String[] rangs=StringUtils.split(microServiceInfo.getVisualRange(), "|");
\r
285 if(RouteUtil.contain(rangs, "0")){
\r
286 iuiRouteInfo.setVisualRange("0");
\r
289 iuiRouteInfo.setVisualRange("1");
\r
292 if("ip_hash".equals(microServiceInfo.getLb_policy())){
\r
293 iuiRouteInfo.setUseOwnUpstream("1");
\r
296 String serviceName=microServiceInfo.getServiceName();
\r
297 if(serviceName.startsWith("iui_")||serviceName.startsWith("IUI_")){
\r
298 serviceName=serviceName.substring(4);
\r
302 iuiRouteInfo.setServiceName(serviceName);
\r
304 return iuiRouteInfo;
\r