dubbo优化

This commit is contained in:
暮光:城中城
2019-03-01 22:27:17 +08:00
parent ed8242535d
commit 6f30ef0f49
4 changed files with 74 additions and 27 deletions

View File

@@ -25,8 +25,11 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.net.URLDecoder; import java.net.URLDecoder;
import java.util.*; import java.util.*;
@@ -46,7 +49,9 @@ public class DubboController {
private static Logger logger = LoggerFactory.getLogger(DubboController.class); private static Logger logger = LoggerFactory.getLogger(DubboController.class);
@Value("${zyplayer.doc.dubbo.zookeeper.url:}") @Value("${zyplayer.doc.dubbo.zookeeper.url:}")
private String zookeeperUrl; private String serviceZookeeperUrl;
@Value("${zyplayer.doc.dubbo.zookeeper.metadata-url:}")
private String metadataZookeeperUrl;
@Value("${zyplayer.doc.dubbo.nacos.url:}") @Value("${zyplayer.doc.dubbo.nacos.url:}")
private String nacosUrl; private String nacosUrl;
@Value("${zyplayer.doc.dubbo.nacos.service:}") @Value("${zyplayer.doc.dubbo.nacos.service:}")
@@ -54,6 +59,28 @@ public class DubboController {
@Resource @Resource
private MgDubboStorageService mgDubboStorageService; private MgDubboStorageService mgDubboStorageService;
private CuratorFramework serverClient;
private CuratorFramework metadataClient;
@PostConstruct
private void init() {
if (StringUtils.isNotBlank(serviceZookeeperUrl)) {
RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
serverClient = CuratorFrameworkFactory.newClient(serviceZookeeperUrl, retryPolicy);
serverClient.start();
}
if (StringUtils.isNotBlank(metadataZookeeperUrl)) {
RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
metadataClient = CuratorFrameworkFactory.newClient(metadataZookeeperUrl, retryPolicy);
metadataClient.start();
}
}
@PreDestroy
private void preDestroy() {
serverClient.close();
}
/** /**
* 重新获取所有的服务列表 * 重新获取所有的服务列表
* *
@@ -63,7 +90,7 @@ public class DubboController {
@PostMapping(value = "/reloadService") @PostMapping(value = "/reloadService")
public DocResponseJson loadService() throws Exception { public DocResponseJson loadService() throws Exception {
List<DubboInfo> providerList; List<DubboInfo> providerList;
if (StringUtils.isBlank(zookeeperUrl)) { if (StringUtils.isBlank(serviceZookeeperUrl)) {
if (StringUtils.isBlank(nacosUrl) || StringUtils.isBlank(nacosService)) { if (StringUtils.isBlank(nacosUrl) || StringUtils.isBlank(nacosService)) {
return DocResponseJson.warn("zyplayer.doc.dubbo.zookeeper.url、zyplayer.doc.dubbo.nacos.url 参数均未配置"); return DocResponseJson.warn("zyplayer.doc.dubbo.zookeeper.url、zyplayer.doc.dubbo.nacos.url 参数均未配置");
} }
@@ -169,6 +196,7 @@ public class DubboController {
**/ **/
@PostMapping(value = "/findDocInfo") @PostMapping(value = "/findDocInfo")
public DocResponseJson findDocInfo(DubboRequestParam param) { public DocResponseJson findDocInfo(DubboRequestParam param) {
String resultType = null;
List<DubboDocInfo.DubboDocParam> paramList = new LinkedList<>(); List<DubboDocInfo.DubboDocParam> paramList = new LinkedList<>();
try { try {
Class clazz = Class.forName(param.getService()); Class clazz = Class.forName(param.getService());
@@ -176,10 +204,13 @@ public class DubboController {
for (Method method : methods) { for (Method method : methods) {
String methodName = method.getName(); String methodName = method.getName();
if (methodName.equals(param.getMethod())) { if (methodName.equals(param.getMethod())) {
resultType = method.getGenericReturnType().getTypeName();
Type[] parameterTypes = method.getGenericParameterTypes(); Type[] parameterTypes = method.getGenericParameterTypes();
for (Type clas : parameterTypes) { Parameter[] parameters = method.getParameters();
for (int i = 0; i < parameterTypes.length; i++) {
DubboDocInfo.DubboDocParam docParam = new DubboDocInfo.DubboDocParam(); DubboDocInfo.DubboDocParam docParam = new DubboDocInfo.DubboDocParam();
docParam.setParamType(clas.getTypeName()); docParam.setParamName(parameters[i].getName());
docParam.setParamType(parameterTypes[i].getTypeName());
paramList.add(docParam); paramList.add(docParam);
} }
} }
@@ -187,9 +218,6 @@ public class DubboController {
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
return DocResponseJson.warn("未找到指定类,请引入相关包,类名:" + param.getService()); return DocResponseJson.warn("未找到指定类,请引入相关包,类名:" + param.getService());
} }
if (paramList.isEmpty()) {
return DocResponseJson.ok();
}
Map<String, DubboDocInfo> docInfoMap = new HashMap<>(); Map<String, DubboDocInfo> docInfoMap = new HashMap<>();
String dubboServiceDoc = mgDubboStorageService.get(StorageKeys.DUBBO_SERVICE_DOC); String dubboServiceDoc = mgDubboStorageService.get(StorageKeys.DUBBO_SERVICE_DOC);
if (StringUtils.isNotBlank(dubboServiceDoc)) { if (StringUtils.isNotBlank(dubboServiceDoc)) {
@@ -203,6 +231,7 @@ public class DubboController {
dubboDocInfo.setParams(paramList); dubboDocInfo.setParams(paramList);
dubboDocInfo.setFunction(function); dubboDocInfo.setFunction(function);
dubboDocInfo.setVersion(1); dubboDocInfo.setVersion(1);
dubboDocInfo.setResultType(resultType);
dubboDocInfo.setService(param.getService()); dubboDocInfo.setService(param.getService());
dubboDocInfo.setMethod(param.getMethod()); dubboDocInfo.setMethod(param.getMethod());
docInfoMap.put(function, dubboDocInfo); docInfoMap.put(function, dubboDocInfo);
@@ -293,16 +322,13 @@ public class DubboController {
* @since 2019年2月10日 * @since 2019年2月10日
**/ **/
private List<DubboInfo> getDubboInfoByZookeeper() throws Exception { private List<DubboInfo> getDubboInfoByZookeeper() throws Exception {
RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3); List<String> dubboList = serverClient.getChildren().forPath("/dubbo");
CuratorFramework client = CuratorFrameworkFactory.newClient(zookeeperUrl, retryPolicy);
client.start();
List<String> dubboList = client.getChildren().forPath("/dubbo");
if (dubboList == null || dubboList.isEmpty()) { if (dubboList == null || dubboList.isEmpty()) {
return Collections.emptyList(); return Collections.emptyList();
} }
List<DubboInfo> providerList = new LinkedList<>(); List<DubboInfo> providerList = new LinkedList<>();
for (String dubboStr : dubboList) { for (String dubboStr : dubboList) {
List<String> providers = client.getChildren().forPath("/dubbo/" + dubboStr + "/providers"); List<String> providers = serverClient.getChildren().forPath("/dubbo/" + dubboStr + "/providers");
List<DubboInfo.DubboNodeInfo> nodeList = providers.stream().map(val -> { List<DubboInfo.DubboNodeInfo> nodeList = providers.stream().map(val -> {
String tempStr = val; String tempStr = val;
@@ -336,7 +362,6 @@ public class DubboController {
dubboInfo.setNodeList(nodeList); dubboInfo.setNodeList(nodeList);
providerList.add(dubboInfo); providerList.add(dubboInfo);
} }
client.close();
return providerList; return providerList;
} }
} }

View File

@@ -14,6 +14,7 @@ public class DubboDocInfo {
private String function; private String function;
private String explain; private String explain;
private String result; private String result;
private String resultType;
private Integer version; private Integer version;
private List<DubboDocParam> params; private List<DubboDocParam> params;
@@ -21,7 +22,7 @@ public class DubboDocInfo {
private String paramName; private String paramName;
private String paramType; private String paramType;
private String paramDesc; private String paramDesc;
private Object paramVal; private Object paramValue;
private Integer required; private Integer required;
public String getParamName() { public String getParamName() {
@@ -48,12 +49,12 @@ public class DubboDocInfo {
this.paramDesc = paramDesc; this.paramDesc = paramDesc;
} }
public Object getParamVal() { public Object getParamValue() {
return paramVal; return paramValue;
} }
public void setParamVal(Object paramVal) { public void setParamValue(Object paramValue) {
this.paramVal = paramVal; this.paramValue = paramValue;
} }
public Integer getRequired() { public Integer getRequired() {
@@ -119,4 +120,12 @@ public class DubboDocInfo {
public void setResult(String result) { public void setResult(String result) {
this.result = result; this.result = result;
} }
public String getResultType() {
return resultType;
}
public void setResultType(String resultType) {
this.resultType = resultType;
}
} }

View File

@@ -73,7 +73,7 @@
<!--</div>--> <!--</div>-->
<el-table :data="docParamList" border style="width: 100%; margin-bottom: 5px;"> <el-table :data="docParamList" border style="width: 100%; margin-bottom: 5px;">
<el-table-column label="顺序" width="100"> <el-table-column label="顺序" width="100">
<template slot-scope="scope">{{scope.$index + 1}}</template> <template slot-scope="scope">{{scope.$index}}</template>
</el-table-column> </el-table-column>
<el-table-column label="参数名" width="200"> <el-table-column label="参数名" width="200">
<template slot-scope="scope"> <template slot-scope="scope">
@@ -97,6 +97,9 @@
<el-button @click.prevent="saveDocInfoParam" type="primary" style="float: right;margin: 5px;">保存</el-button> <el-button @click.prevent="saveDocInfoParam" type="primary" style="float: right;margin: 5px;">保存</el-button>
<!--<el-button @click.prevent="addDocParam" style="float: right;margin: 5px;">添加</el-button>--> <!--<el-button @click.prevent="addDocParam" style="float: right;margin: 5px;">添加</el-button>-->
</el-form-item> </el-form-item>
<el-form-item label="返回值:">
{{dubboInfo.docInfo.resultType}}
</el-form-item>
<el-form-item label="结果:"> <el-form-item label="结果:">
<div v-if="dubboInfoResultShow"> <div v-if="dubboInfoResultShow">
<pre>{{dubboInfo.docInfo.result}}<el-button @click.prevent="dubboInfoResultShow = false;" style="float: right;">编辑</el-button></pre> <pre>{{dubboInfo.docInfo.result}}<el-button @click.prevent="dubboInfoResultShow = false;" style="float: right;">编辑</el-button></pre>
@@ -120,11 +123,11 @@
</el-select> </el-select>
<el-button slot="append" @click.prevent="requestExecute">执行</el-button> <el-button slot="append" @click.prevent="requestExecute">执行</el-button>
</el-input> </el-input>
<el-form label-width="100px"label-position="top"> <el-form label-width="100px" label-position="top">
<el-form-item label="请求参数:"> <el-form-item label="请求参数:">
<el-table :data="docParamRequestList" border style="width: 100%; margin: 10px 0;"> <el-table :data="docParamRequestList" border style="width: 100%; margin: 10px 0;">
<el-table-column label="顺序" width="100"> <el-table-column label="顺序" width="100">
<template slot-scope="scope">{{scope.$index + 1}}</template> <template slot-scope="scope">{{scope.$index}}</template>
</el-table-column> </el-table-column>
<el-table-column label="参数名"> <el-table-column label="参数名">
<template slot-scope="scope">{{scope.row.paramName}}</template> <template slot-scope="scope">{{scope.row.paramName}}</template>
@@ -306,10 +309,10 @@
}); });
}, },
saveDocInfoExplain(){ saveDocInfoExplain(){
this.doSaveDocInfo(app.docInfoExplainInput, null, null); this.doSaveDocInfo(app.docInfoExplainInput, null, null, true);
}, },
saveDocInfoResult(){ saveDocInfoResult(){
this.doSaveDocInfo(null, null, app.docInfoResultInput); this.doSaveDocInfo(null, null, app.docInfoResultInput, true);
}, },
saveDocInfoParam() { saveDocInfoParam() {
var docParamList = []; var docParamList = [];
@@ -320,7 +323,7 @@
} }
} }
var paramsJson = JSON.stringify(docParamList); var paramsJson = JSON.stringify(docParamList);
this.doSaveDocInfo(null, paramsJson, null); this.doSaveDocInfo(null, paramsJson, null, true);
}, },
createDocParamRequestList() { createDocParamRequestList() {
var docParamList = []; var docParamList = [];
@@ -332,10 +335,12 @@
} }
app.docParamRequestList = docParamList; app.docParamRequestList = docParamList;
}, },
doSaveDocInfo(explain, params, result){ doSaveDocInfo(explain, params, result, showSuccess){
var param = { var param = {
service: app.dubboInfo.interface, service: app.dubboInfo.interface,
method: app.dubboInfo.method, method: app.dubboInfo.method,
resultType: app.dubboInfo.resultType,
paramValue: app.dubboInfo.paramValue,
version: app.dubboInfo.docInfo.version || 0, version: app.dubboInfo.docInfo.version || 0,
explain: explain, explain: explain,
result: result, result: result,
@@ -349,7 +354,9 @@
app.dubboInfoResultShow = true; app.dubboInfoResultShow = true;
app.docParamList = json.data.params || []; app.docParamList = json.data.params || [];
app.createDocParamRequestList(); app.createDocParamRequestList();
Toast.success("保存成功!"); if (showSuccess) {
Toast.success("保存成功!");
}
} }
}); });
}, },
@@ -398,7 +405,7 @@
app.onlineDebugLoading = true; app.onlineDebugLoading = true;
ajaxTemp("zyplayer-doc-dubbo/doc-dubbo/request", "post", "json", param, function (json) { ajaxTemp("zyplayer-doc-dubbo/doc-dubbo/request", "post", "json", param, function (json) {
app.onlineDebugLoading = false; app.onlineDebugLoading = false;
if (validateResult(json)) { if (json.errCode == 200) {
try { try {
app.requestResult = Formatjson.processObjectToHtmlPre(JSON.parse(json.data), 0, false, false, false, false); app.requestResult = Formatjson.processObjectToHtmlPre(JSON.parse(json.data), 0, false, false, false, false);
} catch (e) { } catch (e) {
@@ -408,6 +415,10 @@
app.requestResult = json.data; app.requestResult = json.data;
} }
} }
var paramsJson = JSON.stringify(app.docParamRequestList);
app.doSaveDocInfo(null, paramsJson, null, false);
} else {
app.requestResult = json.errMsg;
} }
}); });
} }

View File

@@ -16,6 +16,8 @@ zyplayer:
# 优先使用zookeeper未配置时找nacos的配置 # 优先使用zookeeper未配置时找nacos的配置
zookeeper: zookeeper:
url: 127.0.0.1:2181 url: 127.0.0.1:2181
# 服务参数那些信息的服务地址dubbo7.0新特性
metadata-url: 127.0.0.1:2181
nacos: nacos:
# url: http://127.0.0.1:8848/nacos # url: http://127.0.0.1:8848/nacos
# 服务名称,多个使用 ; 分割nacos没办法获取所有的服务列表所以需要指定 # 服务名称,多个使用 ; 分割nacos没办法获取所有的服务列表所以需要指定