You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rocketmq.apache.org by zh...@apache.org on 2022/01/04 10:02:14 UTC
[rocketmq-dashboard] branch master updated: [ISSUE #58] enable the service to support multiple namesrvs (#59)
This is an automated email from the ASF dual-hosted git repository.
zhangyang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/rocketmq-dashboard.git
The following commit(s) were added to refs/heads/master by this push:
new 2d8bf00 [ISSUE #58] enable the service to support multiple namesrvs (#59)
2d8bf00 is described below
commit 2d8bf001b3caa5784947c94352f2235360b31e7c
Author: cserwen <cs...@163.com>
AuthorDate: Tue Jan 4 18:02:08 2022 +0800
[ISSUE #58] enable the service to support multiple namesrvs (#59)
* enable the service to support multiple namesrvs
* use @ to split the namesrv of different clusters
Co-authored-by: dengzhiwen1 <de...@xiaomi.com>
---
.../apache/rocketmq/dashboard/config/RMQConfigure.java | 18 ++++++++++++++++++
.../dashboard/service/impl/OpsServiceImpl.java | 3 ++-
src/main/resources/application.properties | 5 +++--
src/main/resources/static/src/ops.js | 3 ++-
src/main/resources/static/view/pages/ops.html | 8 +++++---
.../dashboard/controller/BaseControllerTest.java | 1 +
6 files changed, 31 insertions(+), 7 deletions(-)
diff --git a/src/main/java/org/apache/rocketmq/dashboard/config/RMQConfigure.java b/src/main/java/org/apache/rocketmq/dashboard/config/RMQConfigure.java
index 1dcd7df..d9149ef 100644
--- a/src/main/java/org/apache/rocketmq/dashboard/config/RMQConfigure.java
+++ b/src/main/java/org/apache/rocketmq/dashboard/config/RMQConfigure.java
@@ -16,6 +16,7 @@
*/
package org.apache.rocketmq.dashboard.config;
+import com.google.common.base.Splitter;
import org.apache.commons.lang3.StringUtils;
import org.apache.rocketmq.common.MixAll;
import org.slf4j.Logger;
@@ -29,6 +30,7 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpStatus;
import java.io.File;
+import java.util.List;
import static org.apache.rocketmq.client.ClientConfig.SEND_MESSAGE_WITH_VIP_CHANNEL_PROPERTY;
@@ -57,6 +59,8 @@ public class RMQConfigure {
private Long timeoutMillis;
+ private String namesrvAddrs;
+
public String getAccessKey() {
return accessKey;
}
@@ -77,6 +81,20 @@ public class RMQConfigure {
return namesrvAddr;
}
+ public String getNamesrvAddrs() {
+ return namesrvAddrs;
+ }
+
+ public void setNamesrvAddrs(String namesrvAddrs) {
+ if (StringUtils.isNotBlank(namesrvAddrs)) {
+ this.namesrvAddrs = namesrvAddrs;
+ List<String> nameSrvAddrList = Splitter.on("@").splitToList(this.namesrvAddrs);
+ if (!nameSrvAddrList.isEmpty()) {
+ this.setNamesrvAddr(nameSrvAddrList.get(0));
+ }
+ }
+ }
+
public void setNamesrvAddr(String namesrvAddr) {
if (StringUtils.isNotBlank(namesrvAddr)) {
this.namesrvAddr = namesrvAddr;
diff --git a/src/main/java/org/apache/rocketmq/dashboard/service/impl/OpsServiceImpl.java b/src/main/java/org/apache/rocketmq/dashboard/service/impl/OpsServiceImpl.java
index 2d98e12..1b92ac1 100644
--- a/src/main/java/org/apache/rocketmq/dashboard/service/impl/OpsServiceImpl.java
+++ b/src/main/java/org/apache/rocketmq/dashboard/service/impl/OpsServiceImpl.java
@@ -46,7 +46,8 @@ public class OpsServiceImpl extends AbstractCommonService implements OpsService
@Override
public Map<String, Object> homePageInfo() {
Map<String, Object> homePageInfoMap = Maps.newHashMap();
- homePageInfoMap.put("namesvrAddrList", Splitter.on(";").splitToList(configure.getNamesrvAddr()));
+ homePageInfoMap.put("currentNamesrv", configure.getNamesrvAddr());
+ homePageInfoMap.put("namesvrAddrList", Splitter.on("@").splitToList(configure.getNamesrvAddrs()));
homePageInfoMap.put("useVIPChannel", Boolean.valueOf(configure.getIsVIPChannel()));
homePageInfoMap.put("useTLS", configure.isUseTLS());
return homePageInfoMap;
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 335ac69..b0a6be0 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -31,8 +31,9 @@ spring.http.encoding.enabled=true
spring.http.encoding.force=true
logging.level.root=INFO
logging.config=classpath:logback.xml
-#if this value is empty,use env value rocketmq.config.namesrvAddr NAMESRV_ADDR | now, you can set it in ops page.default localhost:9876
-rocketmq.config.namesrvAddr=
+#if this value is empty,use env value rocketmq.config.namesrvAddr NAMESRV_ADDR | now, default localhost:9876
+#use @ to distinct the namesrv of different clusters
+rocketmq.config.namesrvAddrs=
#if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true
rocketmq.config.isVIPChannel=
#timeout for mqadminExt, default 5000ms
diff --git a/src/main/resources/static/src/ops.js b/src/main/resources/static/src/ops.js
index 8aab329..c539080 100644
--- a/src/main/resources/static/src/ops.js
+++ b/src/main/resources/static/src/ops.js
@@ -30,6 +30,7 @@ app.controller('opsController', ['$scope', '$location', '$http', 'Notification',
$scope.namesvrAddrList = resp.data.namesvrAddrList;
$scope.useVIPChannel = resp.data.useVIPChannel;
$scope.useTLS = resp.data.useTLS;
+ $scope.selectedNamesrv = resp.data.currentNamesrv;
} else {
Notification.error({message: resp.errMsg, delay: 2000});
}
@@ -43,7 +44,7 @@ app.controller('opsController', ['$scope', '$location', '$http', 'Notification',
$http({
method: "POST",
url: "ops/updateNameSvrAddr.do",
- params: {nameSvrAddrList: $scope.namesvrAddrList.join(";")}
+ params: {nameSvrAddrList: $scope.selectedNamesrv}
}).success(function (resp) {
if (resp.status == 0) {
Notification.info({message: "SUCCESS", delay: 2000});
diff --git a/src/main/resources/static/view/pages/ops.html b/src/main/resources/static/view/pages/ops.html
index 8dc0f4d..55ba6b9 100644
--- a/src/main/resources/static/view/pages/ops.html
+++ b/src/main/resources/static/view/pages/ops.html
@@ -17,9 +17,11 @@
<div class="container-fluid" id="deployHistoryList">
<div class="page-content">
<h2 class="md-title">NameServerAddressList</h2>
- <div class="pull-left">
- <md-chips ng-model="namesvrAddrList" md-on-add="eleChange(namesvrAddrList)"
- md-on-remove="eleChange(namesvrAddrList)" readonly="inputReadonly" md-removable="ctrl.removable"></md-chips>
+ <div class="pull-left" style="min-width: 400px; max-width: 500px; padding: 10px 10px 10px 0">
+ <select ng-model="selectedNamesrv" chosen
+ ng-options="x for x in namesvrAddrList"
+ ng-change="updateNameSvrAddr()"
+ required></select>
</div>
<div class="pull-left">
<button class="btn btn-raised btn-sm btn-primary" type="button" ng-show="{{writeOperationEnabled}}"
diff --git a/src/test/java/org/apache/rocketmq/dashboard/controller/BaseControllerTest.java b/src/test/java/org/apache/rocketmq/dashboard/controller/BaseControllerTest.java
index e1fcb13..1061a3c 100644
--- a/src/test/java/org/apache/rocketmq/dashboard/controller/BaseControllerTest.java
+++ b/src/test/java/org/apache/rocketmq/dashboard/controller/BaseControllerTest.java
@@ -62,6 +62,7 @@ public abstract class BaseControllerTest extends BaseTest {
when(configure.getAccessKey()).thenReturn("12345678");
when(configure.getSecretKey()).thenReturn("rocketmq");
when(configure.getNamesrvAddr()).thenReturn("127.0.0.1:9876");
+ when(configure.getNamesrvAddrs()).thenReturn("127.0.0.1:9876");
when(configure.isACLEnabled()).thenReturn(true);
when(configure.isUseTLS()).thenReturn(false);
}