Skip to content

Commit 7fbbb2a

Browse files
committed
Add two getMetadataMap interfaces on console and admincenter modules
1 parent a2fe670 commit 7fbbb2a

File tree

10 files changed

+428
-12
lines changed

10 files changed

+428
-12
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package com.nepxion.discovery.common.entity;
2+
3+
/**
4+
* <p>Title: Nepxion Discovery</p>
5+
* <p>Description: Nepxion Discovery</p>
6+
* <p>Copyright: Copyright (c) 2017-2050</p>
7+
* <p>Company: Nepxion</p>
8+
* @author Haojun Ren
9+
* @version 1.0
10+
*/
11+
12+
import java.io.Serializable;
13+
import java.util.List;
14+
15+
import org.apache.commons.lang3.builder.EqualsBuilder;
16+
import org.apache.commons.lang3.builder.HashCodeBuilder;
17+
import org.apache.commons.lang3.builder.ToStringBuilder;
18+
import org.apache.commons.lang3.builder.ToStringStyle;
19+
20+
public class MetadataParameter implements Serializable {
21+
private static final long serialVersionUID = -8708814947706738426L;
22+
23+
public static final String SEPARATE = " | ";
24+
25+
private List<String> metadataKeys;
26+
private List<String> serviceIds;
27+
private String separate = SEPARATE;
28+
29+
public List<String> getMetadataKeys() {
30+
return metadataKeys;
31+
}
32+
33+
public void setMetadataKeys(List<String> metadataKeys) {
34+
this.metadataKeys = metadataKeys;
35+
}
36+
37+
public List<String> getServiceIds() {
38+
return serviceIds;
39+
}
40+
41+
public void setServiceIds(List<String> serviceIds) {
42+
this.serviceIds = serviceIds;
43+
}
44+
45+
public String getSeparate() {
46+
return separate;
47+
}
48+
49+
public void setSeparate(String separate) {
50+
this.separate = separate;
51+
}
52+
53+
@Override
54+
public int hashCode() {
55+
return HashCodeBuilder.reflectionHashCode(this);
56+
}
57+
58+
@Override
59+
public boolean equals(Object object) {
60+
return EqualsBuilder.reflectionEquals(this, object);
61+
}
62+
63+
@Override
64+
public String toString() {
65+
return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
66+
}
67+
}

discovery-console/discovery-console-starter/src/main/java/com/nepxion/discovery/console/endpoint/ServiceEndpoint.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929

3030
import com.nepxion.discovery.common.entity.GatewayType;
3131
import com.nepxion.discovery.common.entity.InstanceEntity;
32+
import com.nepxion.discovery.common.entity.MetadataParameter;
3233
import com.nepxion.discovery.common.entity.ServiceType;
3334
import com.nepxion.discovery.common.util.ResponseUtil;
3435
import com.nepxion.discovery.console.resource.ServiceResource;
@@ -117,6 +118,20 @@ public ResponseEntity<?> instanceMap(@RequestBody @ApiParam(value = "服务组
117118
return doInstanceMap(groups);
118119
}
119120

121+
@RequestMapping(path = "/metadata-map/{metadataKey}", method = RequestMethod.POST)
122+
@ApiOperation(value = "获取注册中心的服务实例元数据值列表的Map(值包含单个元数据)", notes = "", response = ResponseEntity.class, httpMethod = "POST")
123+
@ResponseBody
124+
public ResponseEntity<?> metadataMap(@PathVariable(value = "metadataKey") @ApiParam(value = "元数据键名", required = true) String metadataKey, @RequestBody @ApiParam(value = "服务名列表", required = true) List<String> serviceIds) {
125+
return doMetadataMap(metadataKey, serviceIds);
126+
}
127+
128+
@RequestMapping(path = "/metadata-map", method = RequestMethod.POST)
129+
@ApiOperation(value = "获取注册中心的服务实例元数据值列表的Map(值包含多个元数据,通过分隔符分隔)", notes = "", response = ResponseEntity.class, httpMethod = "POST")
130+
@ResponseBody
131+
public ResponseEntity<?> metadataMap(@RequestBody @ApiParam(value = "元数据查询参数对象", required = true) MetadataParameter metadataParameter) {
132+
return doMetadataMap(metadataParameter);
133+
}
134+
120135
private ResponseEntity<?> doDiscoveryType() {
121136
try {
122137
String discoveryType = serviceResource.getDiscoveryType().toString();
@@ -241,4 +256,24 @@ private ResponseEntity<?> doInstanceMap(List<String> groups) {
241256
return ResponseUtil.getFailureResponse(e);
242257
}
243258
}
259+
260+
private ResponseEntity<?> doMetadataMap(String metadataKey, List<String> serviceIds) {
261+
try {
262+
Map<String, List<String>> metadataMap = serviceResource.getMetadataMap(metadataKey, serviceIds);
263+
264+
return ResponseUtil.getSuccessResponse(metadataMap);
265+
} catch (Exception e) {
266+
return ResponseUtil.getFailureResponse(e);
267+
}
268+
}
269+
270+
private ResponseEntity<?> doMetadataMap(MetadataParameter metadataParameter) {
271+
try {
272+
Map<String, List<String>> metadataMap = serviceResource.getMetadataMap(metadataParameter);
273+
274+
return ResponseUtil.getSuccessResponse(metadataMap);
275+
} catch (Exception e) {
276+
return ResponseUtil.getFailureResponse(e);
277+
}
278+
}
244279
}

discovery-console/discovery-console-starter/src/main/java/com/nepxion/discovery/console/resource/ServiceResource.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import com.nepxion.discovery.common.entity.DiscoveryType;
1818
import com.nepxion.discovery.common.entity.GatewayType;
1919
import com.nepxion.discovery.common.entity.InstanceEntity;
20+
import com.nepxion.discovery.common.entity.MetadataParameter;
2021
import com.nepxion.discovery.common.entity.ServiceType;
2122

2223
public interface ServiceResource {
@@ -41,4 +42,8 @@ public interface ServiceResource {
4142
List<InstanceEntity> getInstanceList(String serviceId);
4243

4344
Map<String, List<InstanceEntity>> getInstanceMap(List<String> groups);
45+
46+
Map<String, List<String>> getMetadataMap(String metadataKey, List<String> serviceIds);
47+
48+
Map<String, List<String>> getMetadataMap(MetadataParameter metadataParameter);
4449
}

discovery-console/discovery-console-starter/src/main/java/com/nepxion/discovery/console/resource/ServiceResourceImpl.java

Lines changed: 81 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,13 @@
2222
import org.springframework.cloud.client.discovery.DiscoveryClient;
2323
import org.springframework.cloud.client.discovery.composite.CompositeDiscoveryClient;
2424

25+
import com.nepxion.discovery.common.constant.DiscoveryConstant;
2526
import com.nepxion.discovery.common.delegate.DiscoveryClientDelegate;
2627
import com.nepxion.discovery.common.entity.DiscoveryType;
2728
import com.nepxion.discovery.common.entity.GatewayType;
2829
import com.nepxion.discovery.common.entity.InstanceEntity;
2930
import com.nepxion.discovery.common.entity.InstanceEntityWrapper;
31+
import com.nepxion.discovery.common.entity.MetadataParameter;
3032
import com.nepxion.discovery.common.entity.ServiceType;
3133

3234
public class ServiceResourceImpl implements ServiceResource {
@@ -78,9 +80,8 @@ public List<String> getGroups() {
7880
for (String service : services) {
7981
List<InstanceEntity> instanceEntityList = getInstanceList(service);
8082
for (InstanceEntity instance : instanceEntityList) {
81-
String plugin = instance.getPlugin();
8283
String group = instance.getGroup();
83-
if (StringUtils.isNotEmpty(plugin) && !groupList.contains(group)) {
84+
if (!groupList.contains(group)) {
8485
groupList.add(group);
8586
}
8687
}
@@ -275,9 +276,8 @@ public Map<String, List<InstanceEntity>> getInstanceMap(List<String> groups) {
275276
List<InstanceEntity> instanceEntityList = getInstanceList(service);
276277
if (CollectionUtils.isNotEmpty(groups)) {
277278
for (InstanceEntity instance : instanceEntityList) {
278-
String plugin = instance.getPlugin();
279279
String group = instance.getGroup();
280-
if (StringUtils.isNotEmpty(plugin) && groups.contains(group)) {
280+
if (groups.contains(group)) {
281281
List<InstanceEntity> instanceList = instanceMap.get(service);
282282
if (instanceList == null) {
283283
instanceList = new ArrayList<InstanceEntity>();
@@ -293,4 +293,81 @@ public Map<String, List<InstanceEntity>> getInstanceMap(List<String> groups) {
293293

294294
return instanceMap;
295295
}
296+
297+
@Override
298+
public Map<String, List<String>> getMetadataMap(String metadataKey, List<String> serviceIds) {
299+
Map<String, List<String>> metadataMap = new LinkedHashMap<String, List<String>>(serviceIds.size());
300+
for (String serviceId : serviceIds) {
301+
List<InstanceEntity> instanceEntityList = getInstanceList(serviceId);
302+
for (InstanceEntity instance : instanceEntityList) {
303+
List<String> metadataList = metadataMap.get(serviceId);
304+
if (metadataList == null) {
305+
metadataList = new ArrayList<String>();
306+
metadataMap.put(serviceId, metadataList);
307+
}
308+
String metadataValue = null;
309+
if (StringUtils.equals(metadataKey, DiscoveryConstant.HOST + ":" + DiscoveryConstant.PORT)) {
310+
metadataValue = instance.getHost() + ":" + instance.getPort();
311+
} else if (StringUtils.equals(metadataKey, DiscoveryConstant.HOST)) {
312+
metadataValue = instance.getHost();
313+
} else if (StringUtils.equals(metadataKey, DiscoveryConstant.PORT)) {
314+
metadataValue = String.valueOf(instance.getPort());
315+
} else {
316+
metadataValue = instance.getMetadata().get(metadataKey);
317+
}
318+
if (!metadataList.contains(metadataValue)) {
319+
if (StringUtils.isNotEmpty(metadataValue)) {
320+
metadataList.add(metadataValue);
321+
}
322+
}
323+
}
324+
}
325+
326+
return metadataMap;
327+
}
328+
329+
@Override
330+
public Map<String, List<String>> getMetadataMap(MetadataParameter metadataParameter) {
331+
List<String> metadataKeys = metadataParameter.getMetadataKeys();
332+
List<String> serviceIds = metadataParameter.getServiceIds();
333+
String separate = metadataParameter.getSeparate();
334+
Map<String, List<String>> metadataMap = new LinkedHashMap<String, List<String>>(serviceIds.size());
335+
for (String serviceId : serviceIds) {
336+
List<InstanceEntity> instanceEntityList = getInstanceList(serviceId);
337+
for (InstanceEntity instance : instanceEntityList) {
338+
List<String> metadataList = metadataMap.get(serviceId);
339+
if (metadataList == null) {
340+
metadataList = new ArrayList<String>();
341+
metadataMap.put(serviceId, metadataList);
342+
}
343+
StringBuilder stringBuilder = new StringBuilder();
344+
int index = 0;
345+
for (String metadataKey : metadataKeys) {
346+
if (StringUtils.equals(metadataKey, DiscoveryConstant.HOST + ":" + DiscoveryConstant.PORT)) {
347+
stringBuilder.append(instance.getHost() + ":" + instance.getPort());
348+
} else if (StringUtils.equals(metadataKey, DiscoveryConstant.HOST)) {
349+
stringBuilder.append(instance.getHost());
350+
} else if (StringUtils.equals(metadataKey, DiscoveryConstant.PORT)) {
351+
stringBuilder.append(instance.getPort());
352+
} else {
353+
stringBuilder.append(instance.getMetadata().get(metadataKey));
354+
}
355+
if (index < metadataKeys.size() - 1) {
356+
stringBuilder.append(separate);
357+
}
358+
359+
index++;
360+
}
361+
362+
String metadataValues = stringBuilder.toString();
363+
if (!metadataList.contains(metadataValues)) {
364+
if (StringUtils.isNotEmpty(metadataValues)) {
365+
metadataList.add(metadataValues);
366+
}
367+
}
368+
}
369+
}
370+
371+
return metadataMap;
372+
}
296373
}

discovery-plugin-admin-center/discovery-plugin-admin-center-starter-swagger/src/main/java/com/nepxion/discovery/plugin/admincenter/endpoint/ServiceEndpoint.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929

3030
import com.nepxion.discovery.common.entity.GatewayType;
3131
import com.nepxion.discovery.common.entity.InstanceEntity;
32+
import com.nepxion.discovery.common.entity.MetadataParameter;
3233
import com.nepxion.discovery.common.entity.ServiceType;
3334
import com.nepxion.discovery.common.util.ResponseUtil;
3435
import com.nepxion.discovery.plugin.admincenter.resource.ServiceResource;
@@ -117,6 +118,20 @@ public ResponseEntity<?> instanceMap(@RequestBody @ApiParam(value = "服务组
117118
return doInstanceMap(groups);
118119
}
119120

121+
@RequestMapping(path = "/metadata-map/{metadataKey}", method = RequestMethod.POST)
122+
@ApiOperation(value = "获取注册中心的服务实例元数据值列表的Map(值包含单个元数据)", notes = "", response = ResponseEntity.class, httpMethod = "POST")
123+
@ResponseBody
124+
public ResponseEntity<?> metadataMap(@PathVariable(value = "metadataKey") @ApiParam(value = "元数据键名", required = true) String metadataKey, @RequestBody @ApiParam(value = "服务名列表", required = true) List<String> serviceIds) {
125+
return doMetadataMap(metadataKey, serviceIds);
126+
}
127+
128+
@RequestMapping(path = "/metadata-map", method = RequestMethod.POST)
129+
@ApiOperation(value = "获取注册中心的服务实例元数据值列表的Map(值包含多个元数据,通过分隔符分隔)", notes = "", response = ResponseEntity.class, httpMethod = "POST")
130+
@ResponseBody
131+
public ResponseEntity<?> metadataMap(@RequestBody @ApiParam(value = "元数据查询参数对象", required = true) MetadataParameter metadataParameter) {
132+
return doMetadataMap(metadataParameter);
133+
}
134+
120135
private ResponseEntity<?> doDiscoveryType() {
121136
try {
122137
String discoveryType = serviceResource.getDiscoveryType().toString();
@@ -241,4 +256,24 @@ private ResponseEntity<?> doInstanceMap(List<String> groups) {
241256
return ResponseUtil.getFailureResponse(e);
242257
}
243258
}
259+
260+
private ResponseEntity<?> doMetadataMap(String metadataKey, List<String> serviceIds) {
261+
try {
262+
Map<String, List<String>> metadataMap = serviceResource.getMetadataMap(metadataKey, serviceIds);
263+
264+
return ResponseUtil.getSuccessResponse(metadataMap);
265+
} catch (Exception e) {
266+
return ResponseUtil.getFailureResponse(e);
267+
}
268+
}
269+
270+
private ResponseEntity<?> doMetadataMap(MetadataParameter metadataParameter) {
271+
try {
272+
Map<String, List<String>> metadataMap = serviceResource.getMetadataMap(metadataParameter);
273+
274+
return ResponseUtil.getSuccessResponse(metadataMap);
275+
} catch (Exception e) {
276+
return ResponseUtil.getFailureResponse(e);
277+
}
278+
}
244279
}

discovery-plugin-admin-center/discovery-plugin-admin-center-starter-swagger/src/main/java/com/nepxion/discovery/plugin/admincenter/resource/ServiceResource.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import com.nepxion.discovery.common.entity.DiscoveryType;
1818
import com.nepxion.discovery.common.entity.GatewayType;
1919
import com.nepxion.discovery.common.entity.InstanceEntity;
20+
import com.nepxion.discovery.common.entity.MetadataParameter;
2021
import com.nepxion.discovery.common.entity.ServiceType;
2122

2223
public interface ServiceResource {
@@ -41,4 +42,8 @@ public interface ServiceResource {
4142
List<InstanceEntity> getInstanceList(String serviceId);
4243

4344
Map<String, List<InstanceEntity>> getInstanceMap(List<String> groups);
45+
46+
Map<String, List<String>> getMetadataMap(String metadataKey, List<String> serviceIds);
47+
48+
Map<String, List<String>> getMetadataMap(MetadataParameter metadataParameter);
4449
}

0 commit comments

Comments
 (0)