mirror of
https://github.com/apache/rocketmq-dashboard.git
synced 2026-02-24 23:35:47 +08:00
Compare commits
9 Commits
optimze_qu
...
01e5fcb1b4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
01e5fcb1b4 | ||
|
|
21dc2acfdc | ||
|
|
823bce2b8b | ||
|
|
2fb0fce0b1 | ||
|
|
6456630324 | ||
|
|
a25ccd6337 | ||
|
|
538d1c1c45 | ||
|
|
a4a6000734 | ||
|
|
86bdb06364 |
1
.dockerignore
Normal file
1
.dockerignore
Normal file
@@ -0,0 +1 @@
|
|||||||
|
target/
|
||||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -5,3 +5,4 @@
|
|||||||
.project
|
.project
|
||||||
.factorypath
|
.factorypath
|
||||||
.settings/
|
.settings/
|
||||||
|
.vscode
|
||||||
4
pom.xml
4
pom.xml
@@ -91,10 +91,10 @@
|
|||||||
<commons-io.version>2.4</commons-io.version>
|
<commons-io.version>2.4</commons-io.version>
|
||||||
<commons-cli.version>1.2</commons-cli.version>
|
<commons-cli.version>1.2</commons-cli.version>
|
||||||
<commons-collections.version>3.2.2</commons-collections.version>
|
<commons-collections.version>3.2.2</commons-collections.version>
|
||||||
<rocketmq.version>4.9.3</rocketmq.version>
|
<rocketmq.version>5.1.0</rocketmq.version>
|
||||||
<surefire.version>2.19.1</surefire.version>
|
<surefire.version>2.19.1</surefire.version>
|
||||||
<aspectj.version>1.9.6</aspectj.version>
|
<aspectj.version>1.9.6</aspectj.version>
|
||||||
<lombok.version>1.18.12</lombok.version>
|
<lombok.version>1.18.22</lombok.version>
|
||||||
<main.basedir>${basedir}/../..</main.basedir>
|
<main.basedir>${basedir}/../..</main.basedir>
|
||||||
<docker.image.prefix>apacherocketmq</docker.image.prefix>
|
<docker.image.prefix>apacherocketmq</docker.image.prefix>
|
||||||
<spring.boot.version>2.6.0</spring.boot.version>
|
<spring.boot.version>2.6.0</spring.boot.version>
|
||||||
|
|||||||
@@ -15,9 +15,16 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
#
|
#
|
||||||
|
|
||||||
FROM java:8
|
FROM maven:3.8.6-openjdk-8 AS builder
|
||||||
VOLUME /tmp
|
|
||||||
ADD rocketmq-dashboard-*.jar rocketmq-dashboard.jar
|
ADD . .
|
||||||
RUN sh -c 'touch /rocketmq-dashboard.jar'
|
|
||||||
ENV JAVA_OPTS=""
|
# package jar
|
||||||
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -jar /rocketmq-dashboard.jar" ]
|
RUN mvn clean package -Dmaven.test.skip=true
|
||||||
|
|
||||||
|
FROM openjdk:8u342-jdk
|
||||||
|
|
||||||
|
# copy jar from the builder stage
|
||||||
|
COPY --from=builder target/rocketmq-dashboard-*.jar rocketmq-dashboard.jar
|
||||||
|
|
||||||
|
ENTRYPOINT exec java $JAVA_OPTS -jar rocketmq-dashboard.jar
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ import org.apache.commons.collections.MapUtils;
|
|||||||
import org.apache.commons.pool2.PooledObject;
|
import org.apache.commons.pool2.PooledObject;
|
||||||
import org.apache.commons.pool2.PooledObjectFactory;
|
import org.apache.commons.pool2.PooledObjectFactory;
|
||||||
import org.apache.commons.pool2.impl.DefaultPooledObject;
|
import org.apache.commons.pool2.impl.DefaultPooledObject;
|
||||||
import org.apache.rocketmq.common.protocol.body.ClusterInfo;
|
import org.apache.rocketmq.remoting.protocol.body.ClusterInfo;
|
||||||
import org.apache.rocketmq.tools.admin.MQAdminExt;
|
import org.apache.rocketmq.tools.admin.MQAdminExt;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ package org.apache.rocketmq.dashboard.controller;
|
|||||||
import com.google.common.base.Preconditions;
|
import com.google.common.base.Preconditions;
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import org.apache.commons.collections.CollectionUtils;
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
import org.apache.rocketmq.common.protocol.body.ConsumerConnection;
|
import org.apache.rocketmq.remoting.protocol.body.ConsumerConnection;
|
||||||
import org.apache.rocketmq.dashboard.model.ConnectionInfo;
|
import org.apache.rocketmq.dashboard.model.ConnectionInfo;
|
||||||
import org.apache.rocketmq.dashboard.model.request.ConsumerConfigInfo;
|
import org.apache.rocketmq.dashboard.model.request.ConsumerConfigInfo;
|
||||||
import org.apache.rocketmq.dashboard.model.request.DeleteSubGroupRequest;
|
import org.apache.rocketmq.dashboard.model.request.DeleteSubGroupRequest;
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ package org.apache.rocketmq.dashboard.controller;
|
|||||||
|
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import org.apache.rocketmq.common.Pair;
|
import org.apache.rocketmq.common.Pair;
|
||||||
import org.apache.rocketmq.common.protocol.body.ConsumeMessageDirectlyResult;
|
import org.apache.rocketmq.remoting.protocol.body.ConsumeMessageDirectlyResult;
|
||||||
import org.apache.rocketmq.dashboard.model.MessagePage;
|
import org.apache.rocketmq.dashboard.model.MessagePage;
|
||||||
import org.apache.rocketmq.dashboard.model.MessageView;
|
import org.apache.rocketmq.dashboard.model.MessageView;
|
||||||
import org.apache.rocketmq.dashboard.model.request.MessageQuery;
|
import org.apache.rocketmq.dashboard.model.request.MessageQuery;
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
package org.apache.rocketmq.dashboard.controller;
|
package org.apache.rocketmq.dashboard.controller;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import org.apache.rocketmq.common.protocol.body.ProducerConnection;
|
import org.apache.rocketmq.remoting.protocol.body.ProducerConnection;
|
||||||
import org.apache.rocketmq.dashboard.model.ConnectionInfo;
|
import org.apache.rocketmq.dashboard.model.ConnectionInfo;
|
||||||
import org.apache.rocketmq.dashboard.permisssion.Permission;
|
import org.apache.rocketmq.dashboard.permisssion.Permission;
|
||||||
import org.apache.rocketmq.dashboard.service.ProducerService;
|
import org.apache.rocketmq.dashboard.service.ProducerService;
|
||||||
|
|||||||
@@ -56,6 +56,12 @@ public class TopicController {
|
|||||||
return topicService.fetchAllTopicList(skipSysProcess, skipRetryAndDlq);
|
return topicService.fetchAllTopicList(skipSysProcess, skipRetryAndDlq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/list.queryTopicType", method = RequestMethod.GET)
|
||||||
|
@ResponseBody
|
||||||
|
public Object listTopicType() {
|
||||||
|
return topicService.examineAllTopicType();
|
||||||
|
}
|
||||||
|
|
||||||
@RequestMapping(value = "/stats.query", method = RequestMethod.GET)
|
@RequestMapping(value = "/stats.query", method = RequestMethod.GET)
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public Object stats(@RequestParam String topic) {
|
public Object stats(@RequestParam String topic) {
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import com.google.common.collect.Sets;
|
|||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import org.apache.rocketmq.common.MQVersion;
|
import org.apache.rocketmq.common.MQVersion;
|
||||||
import org.apache.rocketmq.common.protocol.body.Connection;
|
import org.apache.rocketmq.remoting.protocol.body.Connection;
|
||||||
|
|
||||||
public class ConnectionInfo extends Connection {
|
public class ConnectionInfo extends Connection {
|
||||||
private String versionDesc;
|
private String versionDesc;
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.rocketmq.dashboard.model;
|
package org.apache.rocketmq.dashboard.model;
|
||||||
|
|
||||||
import org.apache.rocketmq.common.admin.RollbackStats;
|
import org.apache.rocketmq.remoting.protocol.admin.RollbackStats;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|||||||
@@ -17,8 +17,8 @@
|
|||||||
package org.apache.rocketmq.dashboard.model;
|
package org.apache.rocketmq.dashboard.model;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.apache.rocketmq.common.protocol.body.CMResult;
|
import org.apache.rocketmq.remoting.protocol.body.CMResult;
|
||||||
import org.apache.rocketmq.common.protocol.body.ConsumeMessageDirectlyResult;
|
import org.apache.rocketmq.remoting.protocol.body.ConsumeMessageDirectlyResult;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class DlqMessageResendResult {
|
public class DlqMessageResendResult {
|
||||||
|
|||||||
@@ -16,8 +16,8 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.rocketmq.dashboard.model;
|
package org.apache.rocketmq.dashboard.model;
|
||||||
|
|
||||||
import org.apache.rocketmq.common.protocol.heartbeat.ConsumeType;
|
import org.apache.rocketmq.remoting.protocol.heartbeat.ConsumeType;
|
||||||
import org.apache.rocketmq.common.protocol.heartbeat.MessageModel;
|
import org.apache.rocketmq.remoting.protocol.heartbeat.MessageModel;
|
||||||
|
|
||||||
public class GroupConsumeInfo implements Comparable<GroupConsumeInfo> {
|
public class GroupConsumeInfo implements Comparable<GroupConsumeInfo> {
|
||||||
private String group;
|
private String group;
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.rocketmq.dashboard.model;
|
package org.apache.rocketmq.dashboard.model;
|
||||||
|
|
||||||
import org.apache.rocketmq.common.admin.OffsetWrapper;
|
import org.apache.rocketmq.remoting.protocol.admin.OffsetWrapper;
|
||||||
import org.apache.rocketmq.common.message.MessageQueue;
|
import org.apache.rocketmq.common.message.MessageQueue;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.rocketmq.dashboard.model.request;
|
package org.apache.rocketmq.dashboard.model.request;
|
||||||
|
|
||||||
import org.apache.rocketmq.common.subscription.SubscriptionGroupConfig;
|
import org.apache.rocketmq.remoting.protocol.subscription.SubscriptionGroupConfig;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,6 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package org.apache.rocketmq.dashboard.model.request;
|
package org.apache.rocketmq.dashboard.model.request;
|
||||||
|
|
||||||
import com.google.common.base.Objects;
|
import com.google.common.base.Objects;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -32,6 +31,7 @@ public class TopicConfigInfo {
|
|||||||
private int perm;
|
private int perm;
|
||||||
private boolean order;
|
private boolean order;
|
||||||
|
|
||||||
|
private String messageType;
|
||||||
public List<String> getClusterNameList() {
|
public List<String> getClusterNameList() {
|
||||||
return clusterNameList;
|
return clusterNameList;
|
||||||
}
|
}
|
||||||
@@ -92,6 +92,18 @@ public class TopicConfigInfo {
|
|||||||
this.order = order;
|
this.order = order;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getMessageType() {
|
||||||
|
return messageType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMessageType(String messageType) {
|
||||||
|
this.messageType = messageType;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object o) {
|
public boolean equals(Object o) {
|
||||||
if (this == o)
|
if (this == o)
|
||||||
@@ -103,12 +115,13 @@ public class TopicConfigInfo {
|
|||||||
readQueueNums == that.readQueueNums &&
|
readQueueNums == that.readQueueNums &&
|
||||||
perm == that.perm &&
|
perm == that.perm &&
|
||||||
order == that.order &&
|
order == that.order &&
|
||||||
Objects.equal(topicName, that.topicName);
|
Objects.equal(topicName, that.topicName) &&
|
||||||
|
Objects.equal(messageType, that.messageType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return Objects.hashCode(topicName, writeQueueNums, readQueueNums, perm, order);
|
return Objects.hashCode(topicName, writeQueueNums, readQueueNums, perm, order,messageType);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership.
|
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
* (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.rocketmq.dashboard.model.request;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class TopicTypeList {
|
||||||
|
private List<String> topicNameList;
|
||||||
|
private List<String> messageTypeList;
|
||||||
|
|
||||||
|
public List<String> getTopicNameList() {
|
||||||
|
return topicNameList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTopicNameList(List<String> topicNameList) {
|
||||||
|
this.topicNameList = topicNameList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getMessageTypeList() {
|
||||||
|
return messageTypeList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMessageTypeList(List<String> messageTypeList) {
|
||||||
|
this.messageTypeList = messageTypeList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TopicTypeList(List<String> topicNameList, List<String> messageTypeList) {
|
||||||
|
this.topicNameList = topicNameList;
|
||||||
|
this.messageTypeList = messageTypeList;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership.
|
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
* (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.rocketmq.dashboard.model.request;
|
||||||
|
|
||||||
|
public class TopicTypeMeta {
|
||||||
|
private String topicName;
|
||||||
|
private String messageType;
|
||||||
|
|
||||||
|
public String getTopicName() {
|
||||||
|
return topicName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTopicName(String topicName) {
|
||||||
|
this.topicName = topicName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMessageType() {
|
||||||
|
return messageType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMessageType(String messageType) {
|
||||||
|
this.messageType = messageType;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -19,8 +19,8 @@ package org.apache.rocketmq.dashboard.service;
|
|||||||
import org.apache.rocketmq.tools.admin.MQAdminExt;
|
import org.apache.rocketmq.tools.admin.MQAdminExt;
|
||||||
import com.google.common.base.Throwables;
|
import com.google.common.base.Throwables;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import org.apache.commons.collections.CollectionUtils;
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
@@ -28,7 +28,7 @@ import org.apache.commons.collections.CollectionUtils;
|
|||||||
public abstract class AbstractCommonService {
|
public abstract class AbstractCommonService {
|
||||||
@Resource
|
@Resource
|
||||||
protected MQAdminExt mqAdminExt;
|
protected MQAdminExt mqAdminExt;
|
||||||
protected final Set<String> changeToBrokerNameSet(HashMap<String, Set<String>> clusterAddrTable,
|
protected final Set<String> changeToBrokerNameSet(Map<String, Set<String>> clusterAddrTable,
|
||||||
List<String> clusterNameList, List<String> brokerNameList) {
|
List<String> clusterNameList, List<String> brokerNameList) {
|
||||||
Set<String> finalBrokerNameList = Sets.newHashSet();
|
Set<String> finalBrokerNameList = Sets.newHashSet();
|
||||||
if (CollectionUtils.isNotEmpty(clusterNameList)) {
|
if (CollectionUtils.isNotEmpty(clusterNameList)) {
|
||||||
@@ -38,7 +38,8 @@ public abstract class AbstractCommonService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (CollectionUtils.isNotEmpty(brokerNameList)) {
|
if (CollectionUtils.isNotEmpty(brokerNameList)) {
|
||||||
|
|||||||
@@ -17,8 +17,8 @@
|
|||||||
|
|
||||||
package org.apache.rocketmq.dashboard.service;
|
package org.apache.rocketmq.dashboard.service;
|
||||||
|
|
||||||
import org.apache.rocketmq.common.protocol.body.ConsumerConnection;
|
import org.apache.rocketmq.remoting.protocol.body.ConsumerConnection;
|
||||||
import org.apache.rocketmq.common.protocol.body.ConsumerRunningInfo;
|
import org.apache.rocketmq.remoting.protocol.body.ConsumerRunningInfo;
|
||||||
import org.apache.rocketmq.dashboard.model.ConsumerGroupRollBackStat;
|
import org.apache.rocketmq.dashboard.model.ConsumerGroupRollBackStat;
|
||||||
import org.apache.rocketmq.dashboard.model.GroupConsumeInfo;
|
import org.apache.rocketmq.dashboard.model.GroupConsumeInfo;
|
||||||
import org.apache.rocketmq.dashboard.model.TopicConsumerInfo;
|
import org.apache.rocketmq.dashboard.model.TopicConsumerInfo;
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ package org.apache.rocketmq.dashboard.service;
|
|||||||
|
|
||||||
import org.apache.rocketmq.common.Pair;
|
import org.apache.rocketmq.common.Pair;
|
||||||
import org.apache.rocketmq.common.message.MessageExt;
|
import org.apache.rocketmq.common.message.MessageExt;
|
||||||
import org.apache.rocketmq.common.protocol.body.ConsumeMessageDirectlyResult;
|
import org.apache.rocketmq.remoting.protocol.body.ConsumeMessageDirectlyResult;
|
||||||
import org.apache.rocketmq.dashboard.model.MessagePage;
|
import org.apache.rocketmq.dashboard.model.MessagePage;
|
||||||
import org.apache.rocketmq.dashboard.model.request.MessageQuery;
|
import org.apache.rocketmq.dashboard.model.request.MessageQuery;
|
||||||
import org.apache.rocketmq.tools.admin.api.MessageTrack;
|
import org.apache.rocketmq.tools.admin.api.MessageTrack;
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
package org.apache.rocketmq.dashboard.service;
|
package org.apache.rocketmq.dashboard.service;
|
||||||
|
|
||||||
import org.apache.rocketmq.common.protocol.body.ProducerConnection;
|
import org.apache.rocketmq.remoting.protocol.body.ProducerConnection;
|
||||||
|
|
||||||
public interface ProducerService {
|
public interface ProducerService {
|
||||||
ProducerConnection getProducerConnection(String producerGroup, String topic);
|
ProducerConnection getProducerConnection(String producerGroup, String topic);
|
||||||
|
|||||||
@@ -19,10 +19,11 @@ package org.apache.rocketmq.dashboard.service;
|
|||||||
|
|
||||||
import org.apache.rocketmq.client.producer.SendResult;
|
import org.apache.rocketmq.client.producer.SendResult;
|
||||||
import org.apache.rocketmq.common.TopicConfig;
|
import org.apache.rocketmq.common.TopicConfig;
|
||||||
import org.apache.rocketmq.common.admin.TopicStatsTable;
|
import org.apache.rocketmq.dashboard.model.request.TopicTypeList;
|
||||||
import org.apache.rocketmq.common.protocol.body.GroupList;
|
import org.apache.rocketmq.remoting.protocol.admin.TopicStatsTable;
|
||||||
import org.apache.rocketmq.common.protocol.body.TopicList;
|
import org.apache.rocketmq.remoting.protocol.body.GroupList;
|
||||||
import org.apache.rocketmq.common.protocol.route.TopicRouteData;
|
import org.apache.rocketmq.remoting.protocol.body.TopicList;
|
||||||
|
import org.apache.rocketmq.remoting.protocol.route.TopicRouteData;
|
||||||
import org.apache.rocketmq.dashboard.model.request.SendTopicMessageRequest;
|
import org.apache.rocketmq.dashboard.model.request.SendTopicMessageRequest;
|
||||||
import org.apache.rocketmq.dashboard.model.request.TopicConfigInfo;
|
import org.apache.rocketmq.dashboard.model.request.TopicConfigInfo;
|
||||||
|
|
||||||
@@ -31,6 +32,8 @@ import java.util.List;
|
|||||||
public interface TopicService {
|
public interface TopicService {
|
||||||
TopicList fetchAllTopicList(boolean skipSysProcess, boolean skipRetryAndDlq);
|
TopicList fetchAllTopicList(boolean skipSysProcess, boolean skipRetryAndDlq);
|
||||||
|
|
||||||
|
TopicTypeList examineAllTopicType();
|
||||||
|
|
||||||
TopicStatsTable stats(String topic);
|
TopicStatsTable stats(String topic);
|
||||||
|
|
||||||
TopicRouteData route(String topic);
|
TopicRouteData route(String topic);
|
||||||
|
|||||||
@@ -29,31 +29,41 @@ import org.apache.rocketmq.client.impl.MQAdminImpl;
|
|||||||
import org.apache.rocketmq.common.AclConfig;
|
import org.apache.rocketmq.common.AclConfig;
|
||||||
import org.apache.rocketmq.common.PlainAccessConfig;
|
import org.apache.rocketmq.common.PlainAccessConfig;
|
||||||
import org.apache.rocketmq.common.TopicConfig;
|
import org.apache.rocketmq.common.TopicConfig;
|
||||||
import org.apache.rocketmq.common.admin.ConsumeStats;
|
import org.apache.rocketmq.remoting.protocol.admin.ConsumeStats;
|
||||||
import org.apache.rocketmq.common.admin.RollbackStats;
|
import org.apache.rocketmq.remoting.protocol.admin.RollbackStats;
|
||||||
import org.apache.rocketmq.common.admin.TopicStatsTable;
|
import org.apache.rocketmq.remoting.protocol.admin.TopicStatsTable;
|
||||||
import org.apache.rocketmq.common.message.MessageClientIDSetter;
|
import org.apache.rocketmq.common.message.MessageClientIDSetter;
|
||||||
import org.apache.rocketmq.common.message.MessageExt;
|
import org.apache.rocketmq.common.message.MessageExt;
|
||||||
import org.apache.rocketmq.common.message.MessageQueue;
|
import org.apache.rocketmq.common.message.MessageQueue;
|
||||||
import org.apache.rocketmq.common.protocol.RequestCode;
|
import org.apache.rocketmq.common.message.MessageRequestMode;
|
||||||
import org.apache.rocketmq.common.protocol.ResponseCode;
|
import org.apache.rocketmq.remoting.protocol.RequestCode;
|
||||||
import org.apache.rocketmq.common.protocol.body.BrokerStatsData;
|
import org.apache.rocketmq.remoting.protocol.ResponseCode;
|
||||||
import org.apache.rocketmq.common.protocol.body.ClusterAclVersionInfo;
|
import org.apache.rocketmq.remoting.protocol.body.BrokerReplicasInfo;
|
||||||
import org.apache.rocketmq.common.protocol.body.ClusterInfo;
|
import org.apache.rocketmq.remoting.protocol.body.BrokerStatsData;
|
||||||
import org.apache.rocketmq.common.protocol.body.ConsumeMessageDirectlyResult;
|
import org.apache.rocketmq.remoting.protocol.body.ClusterAclVersionInfo;
|
||||||
import org.apache.rocketmq.common.protocol.body.ConsumeStatsList;
|
import org.apache.rocketmq.remoting.protocol.body.ClusterInfo;
|
||||||
import org.apache.rocketmq.common.protocol.body.ConsumerConnection;
|
import org.apache.rocketmq.remoting.protocol.body.ConsumeMessageDirectlyResult;
|
||||||
import org.apache.rocketmq.common.protocol.body.ConsumerRunningInfo;
|
import org.apache.rocketmq.remoting.protocol.body.ConsumeStatsList;
|
||||||
import org.apache.rocketmq.common.protocol.body.GroupList;
|
import org.apache.rocketmq.remoting.protocol.body.ConsumerConnection;
|
||||||
import org.apache.rocketmq.common.protocol.body.KVTable;
|
import org.apache.rocketmq.remoting.protocol.body.ConsumerRunningInfo;
|
||||||
import org.apache.rocketmq.common.protocol.body.ProducerConnection;
|
import org.apache.rocketmq.remoting.protocol.body.EpochEntryCache;
|
||||||
import org.apache.rocketmq.common.protocol.body.QueryConsumeQueueResponseBody;
|
import org.apache.rocketmq.remoting.protocol.body.GroupList;
|
||||||
import org.apache.rocketmq.common.protocol.body.QueueTimeSpan;
|
import org.apache.rocketmq.remoting.protocol.body.HARuntimeInfo;
|
||||||
import org.apache.rocketmq.common.protocol.body.SubscriptionGroupWrapper;
|
import org.apache.rocketmq.remoting.protocol.body.KVTable;
|
||||||
import org.apache.rocketmq.common.protocol.body.TopicConfigSerializeWrapper;
|
import org.apache.rocketmq.remoting.protocol.body.ProducerConnection;
|
||||||
import org.apache.rocketmq.common.protocol.body.TopicList;
|
import org.apache.rocketmq.remoting.protocol.body.ProducerTableInfo;
|
||||||
import org.apache.rocketmq.common.protocol.route.TopicRouteData;
|
import org.apache.rocketmq.remoting.protocol.body.QueryConsumeQueueResponseBody;
|
||||||
import org.apache.rocketmq.common.subscription.SubscriptionGroupConfig;
|
import org.apache.rocketmq.remoting.protocol.body.QueueTimeSpan;
|
||||||
|
import org.apache.rocketmq.remoting.protocol.body.SubscriptionGroupWrapper;
|
||||||
|
import org.apache.rocketmq.remoting.protocol.body.TopicConfigSerializeWrapper;
|
||||||
|
import org.apache.rocketmq.remoting.protocol.body.TopicList;
|
||||||
|
import org.apache.rocketmq.remoting.protocol.header.controller.ElectMasterResponseHeader;
|
||||||
|
import org.apache.rocketmq.remoting.protocol.header.controller.GetMetaDataResponseHeader;
|
||||||
|
import org.apache.rocketmq.remoting.protocol.heartbeat.SubscriptionData;
|
||||||
|
import org.apache.rocketmq.remoting.protocol.route.TopicRouteData;
|
||||||
|
import org.apache.rocketmq.remoting.protocol.statictopic.TopicQueueMappingDetail;
|
||||||
|
import org.apache.rocketmq.remoting.protocol.subscription.GroupForbidden;
|
||||||
|
import org.apache.rocketmq.remoting.protocol.subscription.SubscriptionGroupConfig;
|
||||||
import org.apache.rocketmq.dashboard.util.JsonUtil;
|
import org.apache.rocketmq.dashboard.util.JsonUtil;
|
||||||
import org.apache.rocketmq.remoting.RemotingClient;
|
import org.apache.rocketmq.remoting.RemotingClient;
|
||||||
import org.apache.rocketmq.remoting.exception.RemotingCommandException;
|
import org.apache.rocketmq.remoting.exception.RemotingCommandException;
|
||||||
@@ -63,7 +73,9 @@ import org.apache.rocketmq.remoting.exception.RemotingSendRequestException;
|
|||||||
import org.apache.rocketmq.remoting.exception.RemotingTimeoutException;
|
import org.apache.rocketmq.remoting.exception.RemotingTimeoutException;
|
||||||
import org.apache.rocketmq.remoting.protocol.RemotingCommand;
|
import org.apache.rocketmq.remoting.protocol.RemotingCommand;
|
||||||
import org.apache.rocketmq.tools.admin.MQAdminExt;
|
import org.apache.rocketmq.tools.admin.MQAdminExt;
|
||||||
|
import org.apache.rocketmq.tools.admin.api.BrokerOperatorResult;
|
||||||
import org.apache.rocketmq.tools.admin.api.MessageTrack;
|
import org.apache.rocketmq.tools.admin.api.MessageTrack;
|
||||||
|
import org.apache.rocketmq.tools.admin.common.AdminToolResult;
|
||||||
import org.joor.Reflect;
|
import org.joor.Reflect;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@@ -81,7 +93,7 @@ public class MQAdminExtImpl implements MQAdminExt {
|
|||||||
@Override
|
@Override
|
||||||
public void updateBrokerConfig(String brokerAddr, Properties properties)
|
public void updateBrokerConfig(String brokerAddr, Properties properties)
|
||||||
throws RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException,
|
throws RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException,
|
||||||
UnsupportedEncodingException, InterruptedException, MQBrokerException {
|
UnsupportedEncodingException, InterruptedException, MQBrokerException, MQClientException {
|
||||||
MQAdminInstance.threadLocalMQAdminExt().updateBrokerConfig(brokerAddr, properties);
|
MQAdminInstance.threadLocalMQAdminExt().updateBrokerConfig(brokerAddr, properties);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -128,7 +140,7 @@ public class MQAdminExtImpl implements MQAdminExt {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SubscriptionGroupConfig examineSubscriptionGroupConfig(String addr, String group) {
|
public SubscriptionGroupConfig examineSubscriptionGroupConfig(String addr, String group) throws MQBrokerException {
|
||||||
RemotingClient remotingClient = MQAdminInstance.threadLocalRemotingClient();
|
RemotingClient remotingClient = MQAdminInstance.threadLocalRemotingClient();
|
||||||
RemotingCommand request = RemotingCommand.createRequestCommand(RequestCode.GET_ALL_SUBSCRIPTIONGROUP_CONFIG, null);
|
RemotingCommand request = RemotingCommand.createRequestCommand(RequestCode.GET_ALL_SUBSCRIPTIONGROUP_CONFIG, null);
|
||||||
RemotingCommand response = null;
|
RemotingCommand response = null;
|
||||||
@@ -136,7 +148,8 @@ public class MQAdminExtImpl implements MQAdminExt {
|
|||||||
response = remotingClient.invokeSync(addr, request, 3000);
|
response = remotingClient.invokeSync(addr, request, 3000);
|
||||||
}
|
}
|
||||||
catch (Exception err) {
|
catch (Exception err) {
|
||||||
throw Throwables.propagate(err);
|
Throwables.throwIfUnchecked(err);
|
||||||
|
throw new RuntimeException(err);
|
||||||
}
|
}
|
||||||
assert response != null;
|
assert response != null;
|
||||||
switch (response.getCode()) {
|
switch (response.getCode()) {
|
||||||
@@ -145,12 +158,12 @@ public class MQAdminExtImpl implements MQAdminExt {
|
|||||||
return subscriptionGroupWrapper.getSubscriptionGroupTable().get(group);
|
return subscriptionGroupWrapper.getSubscriptionGroupTable().get(group);
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
throw Throwables.propagate(new MQBrokerException(response.getCode(), response.getRemark()));
|
throw new MQBrokerException(response.getCode(), response.getRemark());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TopicConfig examineTopicConfig(String addr, String topic) {
|
public TopicConfig examineTopicConfig(String addr, String topic) throws MQBrokerException {
|
||||||
RemotingClient remotingClient = MQAdminInstance.threadLocalRemotingClient();
|
RemotingClient remotingClient = MQAdminInstance.threadLocalRemotingClient();
|
||||||
RemotingCommand request = RemotingCommand.createRequestCommand(RequestCode.GET_ALL_TOPIC_CONFIG, null);
|
RemotingCommand request = RemotingCommand.createRequestCommand(RequestCode.GET_ALL_TOPIC_CONFIG, null);
|
||||||
RemotingCommand response = null;
|
RemotingCommand response = null;
|
||||||
@@ -158,7 +171,8 @@ public class MQAdminExtImpl implements MQAdminExt {
|
|||||||
response = remotingClient.invokeSync(addr, request, 3000);
|
response = remotingClient.invokeSync(addr, request, 3000);
|
||||||
}
|
}
|
||||||
catch (Exception err) {
|
catch (Exception err) {
|
||||||
throw Throwables.propagate(err);
|
Throwables.throwIfUnchecked(err);
|
||||||
|
throw new RuntimeException(err);
|
||||||
}
|
}
|
||||||
switch (response.getCode()) {
|
switch (response.getCode()) {
|
||||||
case ResponseCode.SUCCESS: {
|
case ResponseCode.SUCCESS: {
|
||||||
@@ -166,7 +180,7 @@ public class MQAdminExtImpl implements MQAdminExt {
|
|||||||
return topicConfigSerializeWrapper.getTopicConfigTable().get(topic);
|
return topicConfigSerializeWrapper.getTopicConfigTable().get(topic);
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
throw Throwables.propagate(new MQBrokerException(response.getCode(), response.getRemark()));
|
throw new MQBrokerException(response.getCode(), response.getRemark());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -376,14 +390,14 @@ public class MQAdminExtImpl implements MQAdminExt {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createTopic(String key, String newTopic, int queueNum) throws MQClientException {
|
public void createTopic(String key, String newTopic, int queueNum, Map<String, String> attributes) throws MQClientException {
|
||||||
MQAdminInstance.threadLocalMQAdminExt().createTopic(key, newTopic, queueNum);
|
MQAdminInstance.threadLocalMQAdminExt().createTopic(key, newTopic, queueNum, attributes);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createTopic(String key, String newTopic, int queueNum, int topicSysFlag)
|
public void createTopic(String key, String newTopic, int queueNum, int topicSysFlag, Map<String, String> attributes)
|
||||||
throws MQClientException {
|
throws MQClientException {
|
||||||
MQAdminInstance.threadLocalMQAdminExt().createTopic(key, newTopic, queueNum, topicSysFlag);
|
MQAdminInstance.threadLocalMQAdminExt().createTopic(key, newTopic, queueNum, topicSysFlag, attributes);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -572,4 +586,257 @@ public class MQAdminExtImpl implements MQAdminExt {
|
|||||||
String msgId) throws RemotingException, MQClientException, InterruptedException, MQBrokerException {
|
String msgId) throws RemotingException, MQClientException, InterruptedException, MQBrokerException {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addBrokerToContainer(String brokerContainerAddr, String brokerConfig) throws InterruptedException,
|
||||||
|
MQBrokerException, RemotingTimeoutException, RemotingSendRequestException, RemotingConnectException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'addBrokerToContainer'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removeBrokerFromContainer(String brokerContainerAddr, String clusterName, String brokerName,
|
||||||
|
long brokerId) throws InterruptedException, MQBrokerException, RemotingTimeoutException,
|
||||||
|
RemotingSendRequestException, RemotingConnectException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'removeBrokerFromContainer'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateGlobalWhiteAddrConfig(String addr, String globalWhiteAddrs, String aclFileFullPath)
|
||||||
|
throws RemotingException, MQBrokerException, InterruptedException, MQClientException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'updateGlobalWhiteAddrConfig'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TopicStatsTable examineTopicStats(String brokerAddr, String topic)
|
||||||
|
throws RemotingException, MQClientException, InterruptedException, MQBrokerException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'examineTopicStats'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AdminToolResult<TopicStatsTable> examineTopicStatsConcurrent(String topic) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'examineTopicStatsConcurrent'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ConsumeStats examineConsumeStats(String brokerAddr, String consumerGroup, String topicName,
|
||||||
|
long timeoutMillis) throws InterruptedException, RemotingTimeoutException, RemotingSendRequestException,
|
||||||
|
RemotingConnectException, MQBrokerException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'examineConsumeStats'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AdminToolResult<ConsumeStats> examineConsumeStatsConcurrent(String consumerGroup, String topic) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'examineConsumeStatsConcurrent'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ConsumerConnection examineConsumerConnectionInfo(String consumerGroup, String brokerAddr)
|
||||||
|
throws InterruptedException, MQBrokerException, RemotingException, MQClientException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'examineConsumerConnectionInfo'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ProducerTableInfo getAllProducerInfo(String brokerAddr)
|
||||||
|
throws RemotingException, MQClientException, InterruptedException, MQBrokerException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'getAllProducerInfo'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteTopic(String topicName, String clusterName)
|
||||||
|
throws RemotingException, MQBrokerException, InterruptedException, MQClientException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'deleteTopic'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AdminToolResult<BrokerOperatorResult> deleteTopicInBrokerConcurrent(Set<String> addrs, String topic) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'deleteTopicInBrokerConcurrent'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteTopicInNameServer(Set<String> addrs, String clusterName, String topic)
|
||||||
|
throws RemotingException, MQBrokerException, InterruptedException, MQClientException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'deleteTopicInNameServer'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AdminToolResult<BrokerOperatorResult> resetOffsetNewConcurrent(String group, String topic, long timestamp) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'resetOffsetNewConcurrent'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TopicList queryTopicsByConsumer(String group)
|
||||||
|
throws InterruptedException, MQBrokerException, RemotingException, MQClientException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'queryTopicsByConsumer'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AdminToolResult<TopicList> queryTopicsByConsumerConcurrent(String group) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'queryTopicsByConsumerConcurrent'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SubscriptionData querySubscription(String group, String topic)
|
||||||
|
throws InterruptedException, MQBrokerException, RemotingException, MQClientException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'querySubscription'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AdminToolResult<List<QueueTimeSpan>> queryConsumeTimeSpanConcurrent(String topic, String group) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'queryConsumeTimeSpanConcurrent'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean deleteExpiredCommitLog(String cluster) throws RemotingConnectException, RemotingSendRequestException,
|
||||||
|
RemotingTimeoutException, MQClientException, InterruptedException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'deleteExpiredCommitLog'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean deleteExpiredCommitLogByAddr(String addr) throws RemotingConnectException,
|
||||||
|
RemotingSendRequestException, RemotingTimeoutException, MQClientException, InterruptedException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'deleteExpiredCommitLogByAddr'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ConsumerRunningInfo getConsumerRunningInfo(String consumerGroup, String clientId, boolean jstack,
|
||||||
|
boolean metrics) throws RemotingException, MQClientException, InterruptedException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'getConsumerRunningInfo'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<MessageTrack> messageTrackDetailConcurrent(MessageExt msg)
|
||||||
|
throws RemotingException, MQClientException, InterruptedException, MQBrokerException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'messageTrackDetailConcurrent'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setMessageRequestMode(String brokerAddr, String topic, String consumerGroup, MessageRequestMode mode,
|
||||||
|
int popWorkGroupSize, long timeoutMillis) throws InterruptedException, RemotingTimeoutException,
|
||||||
|
RemotingSendRequestException, RemotingConnectException, MQClientException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'setMessageRequestMode'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long searchOffset(String brokerAddr, String topicName, int queueId, long timestamp, long timeoutMillis)
|
||||||
|
throws RemotingException, MQBrokerException, InterruptedException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'searchOffset'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void resetOffsetByQueueId(String brokerAddr, String consumerGroup, String topicName, int queueId,
|
||||||
|
long resetOffset) throws RemotingException, InterruptedException, MQBrokerException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'resetOffsetByQueueId'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void createStaticTopic(String addr, String defaultTopic, TopicConfig topicConfig,
|
||||||
|
TopicQueueMappingDetail mappingDetail, boolean force)
|
||||||
|
throws RemotingException, InterruptedException, MQBrokerException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'createStaticTopic'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GroupForbidden updateAndGetGroupReadForbidden(String brokerAddr, String groupName, String topicName,
|
||||||
|
Boolean readable) throws RemotingException, InterruptedException, MQBrokerException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'updateAndGetGroupReadForbidden'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MessageExt queryMessage(String clusterName, String topic, String msgId)
|
||||||
|
throws RemotingException, MQBrokerException, InterruptedException, MQClientException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'queryMessage'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HARuntimeInfo getBrokerHAStatus(String brokerAddr) throws RemotingConnectException,
|
||||||
|
RemotingSendRequestException, RemotingTimeoutException, InterruptedException, MQBrokerException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'getBrokerHAStatus'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BrokerReplicasInfo getInSyncStateData(String controllerAddress, List<String> brokers)
|
||||||
|
throws RemotingException, InterruptedException, MQBrokerException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'getInSyncStateData'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public EpochEntryCache getBrokerEpochCache(String brokerAddr)
|
||||||
|
throws RemotingException, InterruptedException, MQBrokerException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'getBrokerEpochCache'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GetMetaDataResponseHeader getControllerMetaData(String controllerAddr)
|
||||||
|
throws RemotingException, InterruptedException, MQBrokerException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'getControllerMetaData'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void resetMasterFlushOffset(String brokerAddr, long masterFlushOffset) throws InterruptedException,
|
||||||
|
MQBrokerException, RemotingTimeoutException, RemotingSendRequestException, RemotingConnectException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'resetMasterFlushOffset'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, Properties> getControllerConfig(List<String> controllerServers)
|
||||||
|
throws InterruptedException, RemotingTimeoutException, RemotingSendRequestException,
|
||||||
|
RemotingConnectException, MQClientException, UnsupportedEncodingException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'getControllerConfig'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateControllerConfig(Properties properties, List<String> controllers)
|
||||||
|
throws InterruptedException, RemotingConnectException, UnsupportedEncodingException,
|
||||||
|
RemotingSendRequestException, RemotingTimeoutException, MQClientException, MQBrokerException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'updateControllerConfig'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ElectMasterResponseHeader electMaster(String controllerAddr, String clusterName, String brokerName,
|
||||||
|
String brokerAddr) throws RemotingException, InterruptedException, MQBrokerException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'electMaster'");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void cleanControllerBrokerData(String controllerAddr, String clusterName, String brokerName,
|
||||||
|
String brokerAddr, boolean isCleanLivingBroker)
|
||||||
|
throws RemotingException, InterruptedException, MQBrokerException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'cleanControllerBrokerData'");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,8 +36,8 @@ import org.apache.rocketmq.client.exception.MQClientException;
|
|||||||
import org.apache.rocketmq.common.AclConfig;
|
import org.apache.rocketmq.common.AclConfig;
|
||||||
import org.apache.rocketmq.common.MixAll;
|
import org.apache.rocketmq.common.MixAll;
|
||||||
import org.apache.rocketmq.common.PlainAccessConfig;
|
import org.apache.rocketmq.common.PlainAccessConfig;
|
||||||
import org.apache.rocketmq.common.protocol.body.ClusterInfo;
|
import org.apache.rocketmq.remoting.protocol.body.ClusterInfo;
|
||||||
import org.apache.rocketmq.common.protocol.route.BrokerData;
|
import org.apache.rocketmq.remoting.protocol.route.BrokerData;
|
||||||
import org.apache.rocketmq.dashboard.model.request.AclRequest;
|
import org.apache.rocketmq.dashboard.model.request.AclRequest;
|
||||||
import org.apache.rocketmq.dashboard.service.AbstractCommonService;
|
import org.apache.rocketmq.dashboard.service.AbstractCommonService;
|
||||||
import org.apache.rocketmq.dashboard.service.AclService;
|
import org.apache.rocketmq.dashboard.service.AclService;
|
||||||
@@ -68,7 +68,8 @@ public class AclServiceImpl extends AbstractCommonService implements AclService
|
|||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("getAclConfig error.", e);
|
log.error("getAclConfig error.", e);
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
AclConfig aclConfig = new AclConfig();
|
AclConfig aclConfig = new AclConfig();
|
||||||
aclConfig.setGlobalWhiteAddrs(Collections.emptyList());
|
aclConfig.setGlobalWhiteAddrs(Collections.emptyList());
|
||||||
@@ -100,7 +101,8 @@ public class AclServiceImpl extends AbstractCommonService implements AclService
|
|||||||
mqAdminExt.createAndUpdatePlainAccessConfig(addr, config);
|
mqAdminExt.createAndUpdatePlainAccessConfig(addr, config);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -116,7 +118,8 @@ public class AclServiceImpl extends AbstractCommonService implements AclService
|
|||||||
log.info("Delete acl [{}] from broker [{}] complete", config.getAccessKey(), addr);
|
log.info("Delete acl [{}] from broker [{}] complete", config.getAccessKey(), addr);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -142,7 +145,8 @@ public class AclServiceImpl extends AbstractCommonService implements AclService
|
|||||||
mqAdminExt.createAndUpdatePlainAccessConfig(addr, config);
|
mqAdminExt.createAndUpdatePlainAccessConfig(addr, config);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -174,7 +178,8 @@ public class AclServiceImpl extends AbstractCommonService implements AclService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -206,7 +211,8 @@ public class AclServiceImpl extends AbstractCommonService implements AclService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -249,7 +255,8 @@ public class AclServiceImpl extends AbstractCommonService implements AclService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -261,7 +268,8 @@ public class AclServiceImpl extends AbstractCommonService implements AclService
|
|||||||
mqAdminExt.createAndUpdatePlainAccessConfig(addr, config);
|
mqAdminExt.createAndUpdatePlainAccessConfig(addr, config);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -281,7 +289,8 @@ public class AclServiceImpl extends AbstractCommonService implements AclService
|
|||||||
mqAdminExt.updateGlobalWhiteAddrConfig(addr, StringUtils.join(aclConfig.getGlobalWhiteAddrs(), ","));
|
mqAdminExt.updateGlobalWhiteAddrConfig(addr, StringUtils.join(aclConfig.getGlobalWhiteAddrs(), ","));
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -297,7 +306,8 @@ public class AclServiceImpl extends AbstractCommonService implements AclService
|
|||||||
mqAdminExt.updateGlobalWhiteAddrConfig(addr, StringUtils.join(aclConfig.getGlobalWhiteAddrs(), ","));
|
mqAdminExt.updateGlobalWhiteAddrConfig(addr, StringUtils.join(aclConfig.getGlobalWhiteAddrs(), ","));
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -311,7 +321,8 @@ public class AclServiceImpl extends AbstractCommonService implements AclService
|
|||||||
mqAdminExt.updateGlobalWhiteAddrConfig(addr, StringUtils.join(whiteList, ","));
|
mqAdminExt.updateGlobalWhiteAddrConfig(addr, StringUtils.join(whiteList, ","));
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,9 +17,10 @@
|
|||||||
|
|
||||||
package org.apache.rocketmq.dashboard.service.impl;
|
package org.apache.rocketmq.dashboard.service.impl;
|
||||||
|
|
||||||
import org.apache.rocketmq.common.protocol.body.ClusterInfo;
|
import org.apache.rocketmq.common.attribute.TopicMessageType;
|
||||||
import org.apache.rocketmq.common.protocol.body.KVTable;
|
import org.apache.rocketmq.remoting.protocol.body.ClusterInfo;
|
||||||
import org.apache.rocketmq.common.protocol.route.BrokerData;
|
import org.apache.rocketmq.remoting.protocol.body.KVTable;
|
||||||
|
import org.apache.rocketmq.remoting.protocol.route.BrokerData;
|
||||||
import org.apache.rocketmq.tools.admin.MQAdminExt;
|
import org.apache.rocketmq.tools.admin.MQAdminExt;
|
||||||
import org.apache.rocketmq.dashboard.service.ClusterService;
|
import org.apache.rocketmq.dashboard.service.ClusterService;
|
||||||
import org.apache.rocketmq.dashboard.util.JsonUtil;
|
import org.apache.rocketmq.dashboard.util.JsonUtil;
|
||||||
@@ -30,8 +31,10 @@ import org.slf4j.LoggerFactory;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class ClusterServiceImpl implements ClusterService {
|
public class ClusterServiceImpl implements ClusterService {
|
||||||
@@ -56,10 +59,14 @@ public class ClusterServiceImpl implements ClusterService {
|
|||||||
}
|
}
|
||||||
resultMap.put("clusterInfo", clusterInfo);
|
resultMap.put("clusterInfo", clusterInfo);
|
||||||
resultMap.put("brokerServer", brokerServer);
|
resultMap.put("brokerServer", brokerServer);
|
||||||
|
// add messageType
|
||||||
|
resultMap.put("messageTypes", Arrays.stream(TopicMessageType.values()).sorted()
|
||||||
|
.collect(Collectors.toMap(TopicMessageType::getValue, messageType ->String.format("MESSAGE_TYPE_%s",messageType.getValue()))));
|
||||||
return resultMap;
|
return resultMap;
|
||||||
}
|
}
|
||||||
catch (Exception err) {
|
catch (Exception err) {
|
||||||
throw Throwables.propagate(err);
|
Throwables.throwIfUnchecked(err);
|
||||||
|
throw new RuntimeException(err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,7 +77,8 @@ public class ClusterServiceImpl implements ClusterService {
|
|||||||
return mqAdminExt.getBrokerConfig(brokerAddr);
|
return mqAdminExt.getBrokerConfig(brokerAddr);
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,6 +29,14 @@ import java.util.HashSet;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.CountDownLatch;
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
|
import java.util.concurrent.LinkedBlockingQueue;
|
||||||
|
import java.util.concurrent.RejectedExecutionHandler;
|
||||||
|
import java.util.concurrent.ThreadFactory;
|
||||||
|
import java.util.concurrent.ThreadPoolExecutor;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import org.apache.commons.collections.CollectionUtils;
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
@@ -36,18 +44,19 @@ import org.apache.commons.lang3.StringUtils;
|
|||||||
import org.apache.rocketmq.client.exception.MQClientException;
|
import org.apache.rocketmq.client.exception.MQClientException;
|
||||||
import org.apache.rocketmq.common.MQVersion;
|
import org.apache.rocketmq.common.MQVersion;
|
||||||
import org.apache.rocketmq.common.MixAll;
|
import org.apache.rocketmq.common.MixAll;
|
||||||
import org.apache.rocketmq.common.admin.ConsumeStats;
|
import org.apache.rocketmq.remoting.protocol.admin.ConsumeStats;
|
||||||
import org.apache.rocketmq.common.admin.RollbackStats;
|
import org.apache.rocketmq.remoting.protocol.admin.RollbackStats;
|
||||||
import org.apache.rocketmq.common.message.MessageQueue;
|
import org.apache.rocketmq.common.message.MessageQueue;
|
||||||
import org.apache.rocketmq.common.protocol.ResponseCode;
|
import org.apache.rocketmq.remoting.protocol.ResponseCode;
|
||||||
import org.apache.rocketmq.common.protocol.body.ClusterInfo;
|
import org.apache.rocketmq.remoting.protocol.body.ClusterInfo;
|
||||||
import org.apache.rocketmq.common.protocol.body.Connection;
|
import org.apache.rocketmq.remoting.protocol.body.Connection;
|
||||||
import org.apache.rocketmq.common.protocol.body.ConsumerConnection;
|
import org.apache.rocketmq.remoting.protocol.body.ConsumerConnection;
|
||||||
import org.apache.rocketmq.common.protocol.body.ConsumerRunningInfo;
|
import org.apache.rocketmq.remoting.protocol.body.ConsumerRunningInfo;
|
||||||
import org.apache.rocketmq.common.protocol.body.GroupList;
|
import org.apache.rocketmq.remoting.protocol.body.GroupList;
|
||||||
import org.apache.rocketmq.common.protocol.body.SubscriptionGroupWrapper;
|
import org.apache.rocketmq.remoting.protocol.body.SubscriptionGroupWrapper;
|
||||||
import org.apache.rocketmq.common.protocol.route.BrokerData;
|
import org.apache.rocketmq.remoting.protocol.route.BrokerData;
|
||||||
import org.apache.rocketmq.common.subscription.SubscriptionGroupConfig;
|
import org.apache.rocketmq.remoting.protocol.subscription.SubscriptionGroupConfig;
|
||||||
|
import org.apache.rocketmq.common.utils.ThreadUtils;
|
||||||
import org.apache.rocketmq.dashboard.config.RMQConfigure;
|
import org.apache.rocketmq.dashboard.config.RMQConfigure;
|
||||||
import org.apache.rocketmq.dashboard.model.ConsumerGroupRollBackStat;
|
import org.apache.rocketmq.dashboard.model.ConsumerGroupRollBackStat;
|
||||||
import org.apache.rocketmq.dashboard.model.GroupConsumeInfo;
|
import org.apache.rocketmq.dashboard.model.GroupConsumeInfo;
|
||||||
@@ -60,12 +69,12 @@ import org.apache.rocketmq.dashboard.service.AbstractCommonService;
|
|||||||
import org.apache.rocketmq.dashboard.service.ConsumerService;
|
import org.apache.rocketmq.dashboard.service.ConsumerService;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.beans.factory.DisposableBean;
|
||||||
|
import org.springframework.beans.factory.InitializingBean;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import static com.google.common.base.Throwables.propagate;
|
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class ConsumerServiceImpl extends AbstractCommonService implements ConsumerService {
|
public class ConsumerServiceImpl extends AbstractCommonService implements ConsumerService, InitializingBean, DisposableBean {
|
||||||
private Logger logger = LoggerFactory.getLogger(ConsumerServiceImpl.class);
|
private Logger logger = LoggerFactory.getLogger(ConsumerServiceImpl.class);
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
@@ -73,6 +82,31 @@ public class ConsumerServiceImpl extends AbstractCommonService implements Consum
|
|||||||
|
|
||||||
private static final Set<String> SYSTEM_GROUP_SET = new HashSet<>();
|
private static final Set<String> SYSTEM_GROUP_SET = new HashSet<>();
|
||||||
|
|
||||||
|
private ExecutorService executorService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterPropertiesSet() {
|
||||||
|
Runtime runtime = Runtime.getRuntime();
|
||||||
|
int corePoolSize = Math.max(10, runtime.availableProcessors() * 2);
|
||||||
|
int maximumPoolSize = Math.max(20, runtime.availableProcessors() * 2);
|
||||||
|
ThreadFactory threadFactory = new ThreadFactory() {
|
||||||
|
private final AtomicLong threadIndex = new AtomicLong(0);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Thread newThread(Runnable r) {
|
||||||
|
return new Thread(r, "QueryGroup_" + this.threadIndex.incrementAndGet());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
RejectedExecutionHandler handler = new ThreadPoolExecutor.DiscardOldestPolicy();
|
||||||
|
this.executorService = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, 60L, TimeUnit.SECONDS,
|
||||||
|
new LinkedBlockingQueue<>(5000), threadFactory, handler);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void destroy() {
|
||||||
|
ThreadUtils.shutdownGracefully(executorService, 10L, TimeUnit.SECONDS);
|
||||||
|
}
|
||||||
|
|
||||||
static {
|
static {
|
||||||
SYSTEM_GROUP_SET.add(MixAll.TOOLS_CONSUMER_GROUP);
|
SYSTEM_GROUP_SET.add(MixAll.TOOLS_CONSUMER_GROUP);
|
||||||
SYSTEM_GROUP_SET.add(MixAll.FILTERSRV_CONSUMER_GROUP);
|
SYSTEM_GROUP_SET.add(MixAll.FILTERSRV_CONSUMER_GROUP);
|
||||||
@@ -95,12 +129,29 @@ public class ConsumerServiceImpl extends AbstractCommonService implements Consum
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception err) {
|
catch (Exception err) {
|
||||||
throw Throwables.propagate(err);
|
Throwables.throwIfUnchecked(err);
|
||||||
|
throw new RuntimeException(err);
|
||||||
}
|
}
|
||||||
List<GroupConsumeInfo> groupConsumeInfoList = Lists.newArrayList();
|
List<GroupConsumeInfo> groupConsumeInfoList = Collections.synchronizedList(Lists.newArrayList());
|
||||||
|
CountDownLatch countDownLatch = new CountDownLatch(consumerGroupSet.size());
|
||||||
for (String consumerGroup : consumerGroupSet) {
|
for (String consumerGroup : consumerGroupSet) {
|
||||||
groupConsumeInfoList.add(queryGroup(consumerGroup));
|
executorService.submit(() -> {
|
||||||
|
try {
|
||||||
|
GroupConsumeInfo consumeInfo = queryGroup(consumerGroup);
|
||||||
|
groupConsumeInfoList.add(consumeInfo);
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.error("queryGroup exception, consumerGroup: {}", consumerGroup, e);
|
||||||
|
} finally {
|
||||||
|
countDownLatch.countDown();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
|
countDownLatch.await(30, TimeUnit.SECONDS);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
logger.error("query consumerGroup countDownLatch await Exception", e);
|
||||||
|
}
|
||||||
|
|
||||||
if (!skipSysGroup) {
|
if (!skipSysGroup) {
|
||||||
groupConsumeInfoList.stream().map(group -> {
|
groupConsumeInfoList.stream().map(group -> {
|
||||||
if (SYSTEM_GROUP_SET.contains(group.getGroup())) {
|
if (SYSTEM_GROUP_SET.contains(group.getGroup())) {
|
||||||
@@ -166,7 +217,8 @@ public class ConsumerServiceImpl extends AbstractCommonService implements Consum
|
|||||||
consumeStats = mqAdminExt.examineConsumeStats(groupName, topic);
|
consumeStats = mqAdminExt.examineConsumeStats(groupName, topic);
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
throw propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
List<MessageQueue> mqList = Lists.newArrayList(Iterables.filter(consumeStats.getOffsetTable().keySet(), new Predicate<MessageQueue>() {
|
List<MessageQueue> mqList = Lists.newArrayList(Iterables.filter(consumeStats.getOffsetTable().keySet(), new Predicate<MessageQueue>() {
|
||||||
@Override
|
@Override
|
||||||
@@ -226,7 +278,8 @@ public class ConsumerServiceImpl extends AbstractCommonService implements Consum
|
|||||||
return group2ConsumerInfoMap;
|
return group2ConsumerInfoMap;
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
throw propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -289,7 +342,8 @@ public class ConsumerServiceImpl extends AbstractCommonService implements Consum
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
throw propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
return consumerConfigInfoList;
|
return consumerConfigInfoList;
|
||||||
}
|
}
|
||||||
@@ -314,7 +368,8 @@ public class ConsumerServiceImpl extends AbstractCommonService implements Consum
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
throw propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -341,7 +396,8 @@ public class ConsumerServiceImpl extends AbstractCommonService implements Consum
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception err) {
|
catch (Exception err) {
|
||||||
throw Throwables.propagate(err);
|
Throwables.throwIfUnchecked(err);
|
||||||
|
throw new RuntimeException(err);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -356,7 +412,8 @@ public class ConsumerServiceImpl extends AbstractCommonService implements Consum
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
return brokerNameSet;
|
return brokerNameSet;
|
||||||
|
|
||||||
@@ -368,7 +425,8 @@ public class ConsumerServiceImpl extends AbstractCommonService implements Consum
|
|||||||
return mqAdminExt.examineConsumerConnectionInfo(consumerGroup);
|
return mqAdminExt.examineConsumerConnectionInfo(consumerGroup);
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -378,7 +436,8 @@ public class ConsumerServiceImpl extends AbstractCommonService implements Consum
|
|||||||
return mqAdminExt.getConsumerRunningInfo(consumerGroup, clientId, jstack);
|
return mqAdminExt.getConsumerRunningInfo(consumerGroup, clientId, jstack);
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -107,7 +107,8 @@ public class DashboardCollectServiceImpl implements DashboardCollectService {
|
|||||||
strings = Files.readLines(file, Charsets.UTF_8);
|
strings = Files.readLines(file, Charsets.UTF_8);
|
||||||
}
|
}
|
||||||
catch (IOException e) {
|
catch (IOException e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
StringBuffer sb = new StringBuffer();
|
StringBuffer sb = new StringBuffer();
|
||||||
for (String string : strings) {
|
for (String string : strings) {
|
||||||
|
|||||||
@@ -25,8 +25,8 @@ import javax.annotation.Resource;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.rocketmq.client.exception.MQClientException;
|
import org.apache.rocketmq.client.exception.MQClientException;
|
||||||
import org.apache.rocketmq.common.MixAll;
|
import org.apache.rocketmq.common.MixAll;
|
||||||
import org.apache.rocketmq.common.protocol.ResponseCode;
|
import org.apache.rocketmq.remoting.protocol.ResponseCode;
|
||||||
import org.apache.rocketmq.common.protocol.body.ConsumeMessageDirectlyResult;
|
import org.apache.rocketmq.remoting.protocol.body.ConsumeMessageDirectlyResult;
|
||||||
import org.apache.rocketmq.dashboard.model.DlqMessageResendResult;
|
import org.apache.rocketmq.dashboard.model.DlqMessageResendResult;
|
||||||
import org.apache.rocketmq.dashboard.model.DlqMessageRequest;
|
import org.apache.rocketmq.dashboard.model.DlqMessageRequest;
|
||||||
import org.apache.rocketmq.dashboard.model.MessagePage;
|
import org.apache.rocketmq.dashboard.model.MessagePage;
|
||||||
@@ -62,10 +62,12 @@ public class DlqMessageServiceImpl implements DlqMessageService {
|
|||||||
&& e.getResponseCode() == ResponseCode.TOPIC_NOT_EXIST) {
|
&& e.getResponseCode() == ResponseCode.TOPIC_NOT_EXIST) {
|
||||||
return new MessagePage(new PageImpl<>(messageViews, page, 0), query.getTaskId());
|
return new MessagePage(new PageImpl<>(messageViews, page, 0), query.getTaskId());
|
||||||
} else {
|
} else {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
return messageService.queryMessageByPage(query);
|
return messageService.queryMessageByPage(query);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,9 +37,9 @@ import org.apache.rocketmq.common.Pair;
|
|||||||
import org.apache.rocketmq.common.message.MessageClientIDSetter;
|
import org.apache.rocketmq.common.message.MessageClientIDSetter;
|
||||||
import org.apache.rocketmq.common.message.MessageExt;
|
import org.apache.rocketmq.common.message.MessageExt;
|
||||||
import org.apache.rocketmq.common.message.MessageQueue;
|
import org.apache.rocketmq.common.message.MessageQueue;
|
||||||
import org.apache.rocketmq.common.protocol.body.Connection;
|
import org.apache.rocketmq.remoting.protocol.body.Connection;
|
||||||
import org.apache.rocketmq.common.protocol.body.ConsumeMessageDirectlyResult;
|
import org.apache.rocketmq.remoting.protocol.body.ConsumeMessageDirectlyResult;
|
||||||
import org.apache.rocketmq.common.protocol.body.ConsumerConnection;
|
import org.apache.rocketmq.remoting.protocol.body.ConsumerConnection;
|
||||||
import org.apache.rocketmq.dashboard.config.RMQConfigure;
|
import org.apache.rocketmq.dashboard.config.RMQConfigure;
|
||||||
import org.apache.rocketmq.dashboard.exception.ServiceException;
|
import org.apache.rocketmq.dashboard.exception.ServiceException;
|
||||||
import org.apache.rocketmq.dashboard.model.QueueOffsetInfo;
|
import org.apache.rocketmq.dashboard.model.QueueOffsetInfo;
|
||||||
@@ -115,7 +115,8 @@ public class MessageServiceImpl implements MessageService {
|
|||||||
if (err instanceof MQClientException) {
|
if (err instanceof MQClientException) {
|
||||||
throw new ServiceException(-1, ((MQClientException) err).getErrorMessage());
|
throw new ServiceException(-1, ((MQClientException) err).getErrorMessage());
|
||||||
}
|
}
|
||||||
throw Throwables.propagate(err);
|
Throwables.throwIfUnchecked(err);
|
||||||
|
throw new RuntimeException(err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -185,7 +186,8 @@ public class MessageServiceImpl implements MessageService {
|
|||||||
});
|
});
|
||||||
return messageViewList;
|
return messageViewList;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
} finally {
|
} finally {
|
||||||
consumer.shutdown();
|
consumer.shutdown();
|
||||||
}
|
}
|
||||||
@@ -209,7 +211,8 @@ public class MessageServiceImpl implements MessageService {
|
|||||||
try {
|
try {
|
||||||
return mqAdminExt.consumeMessageDirectly(consumerGroup, clientId, topic, msgId);
|
return mqAdminExt.consumeMessageDirectly(consumerGroup, clientId, topic, msgId);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -223,7 +226,8 @@ public class MessageServiceImpl implements MessageService {
|
|||||||
return mqAdminExt.consumeMessageDirectly(consumerGroup, connection.getClientId(), topic, msgId);
|
return mqAdminExt.consumeMessageDirectly(consumerGroup, connection.getClientId(), topic, msgId);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
throw new IllegalStateException("NO CONSUMER");
|
throw new IllegalStateException("NO CONSUMER");
|
||||||
|
|
||||||
@@ -388,7 +392,8 @@ public class MessageServiceImpl implements MessageService {
|
|||||||
PageImpl<MessageView> page = new PageImpl<>(messageViews, query.page(), total);
|
PageImpl<MessageView> page = new PageImpl<>(messageViews, query.page(), total);
|
||||||
return new MessagePageTask(page, queueOffsetInfos);
|
return new MessagePageTask(page, queueOffsetInfos);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
} finally {
|
} finally {
|
||||||
consumer.shutdown();
|
consumer.shutdown();
|
||||||
}
|
}
|
||||||
@@ -455,7 +460,8 @@ public class MessageServiceImpl implements MessageService {
|
|||||||
}
|
}
|
||||||
return new PageImpl<>(messageViews, query.page(), total);
|
return new PageImpl<>(messageViews, query.page(), total);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
} finally {
|
} finally {
|
||||||
consumer.shutdown();
|
consumer.shutdown();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -82,7 +82,8 @@ public class MonitorServiceImpl implements MonitorService {
|
|||||||
MixAll.string2File(dataStr, path);
|
MixAll.string2File(dataStr, path);
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ package org.apache.rocketmq.dashboard.service.impl;
|
|||||||
|
|
||||||
import com.google.common.base.Throwables;
|
import com.google.common.base.Throwables;
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import org.apache.rocketmq.common.protocol.body.ProducerConnection;
|
import org.apache.rocketmq.remoting.protocol.body.ProducerConnection;
|
||||||
import org.apache.rocketmq.dashboard.service.ProducerService;
|
import org.apache.rocketmq.dashboard.service.ProducerService;
|
||||||
import org.apache.rocketmq.tools.admin.MQAdminExt;
|
import org.apache.rocketmq.tools.admin.MQAdminExt;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@@ -35,7 +35,8 @@ public class ProducerServiceImpl implements ProducerService {
|
|||||||
return mqAdminExt.examineProducerConnectionInfo(producerGroup, topic);
|
return mqAdminExt.examineProducerConnectionInfo(producerGroup, topic);
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,43 +18,57 @@
|
|||||||
package org.apache.rocketmq.dashboard.service.impl;
|
package org.apache.rocketmq.dashboard.service.impl;
|
||||||
|
|
||||||
import com.google.common.base.Throwables;
|
import com.google.common.base.Throwables;
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.rocketmq.acl.common.AclClientRPCHook;
|
import org.apache.rocketmq.acl.common.AclClientRPCHook;
|
||||||
import org.apache.rocketmq.acl.common.SessionCredentials;
|
import org.apache.rocketmq.acl.common.SessionCredentials;
|
||||||
import org.apache.rocketmq.client.producer.DefaultMQProducer;
|
import org.apache.rocketmq.client.producer.DefaultMQProducer;
|
||||||
import org.apache.rocketmq.client.producer.SendResult;
|
import org.apache.rocketmq.client.producer.SendResult;
|
||||||
|
import org.apache.rocketmq.client.producer.TransactionListener;
|
||||||
|
import org.apache.rocketmq.client.producer.TransactionMQProducer;
|
||||||
|
import org.apache.rocketmq.client.producer.LocalTransactionState;
|
||||||
import org.apache.rocketmq.client.trace.TraceContext;
|
import org.apache.rocketmq.client.trace.TraceContext;
|
||||||
import org.apache.rocketmq.client.trace.TraceDispatcher;
|
import org.apache.rocketmq.client.trace.TraceDispatcher;
|
||||||
import org.apache.rocketmq.common.MixAll;
|
import org.apache.rocketmq.common.MixAll;
|
||||||
import org.apache.rocketmq.common.TopicConfig;
|
import org.apache.rocketmq.common.TopicConfig;
|
||||||
import org.apache.rocketmq.common.admin.TopicStatsTable;
|
import org.apache.rocketmq.common.attribute.TopicMessageType;
|
||||||
import org.apache.rocketmq.common.message.Message;
|
import org.apache.rocketmq.common.message.Message;
|
||||||
import org.apache.rocketmq.common.protocol.body.ClusterInfo;
|
import org.apache.rocketmq.common.message.MessageExt;
|
||||||
import org.apache.rocketmq.common.protocol.body.GroupList;
|
|
||||||
import org.apache.rocketmq.common.protocol.body.TopicList;
|
|
||||||
import org.apache.rocketmq.common.protocol.route.BrokerData;
|
|
||||||
import org.apache.rocketmq.common.protocol.route.TopicRouteData;
|
|
||||||
import org.apache.rocketmq.common.topic.TopicValidator;
|
import org.apache.rocketmq.common.topic.TopicValidator;
|
||||||
import org.apache.rocketmq.dashboard.config.RMQConfigure;
|
import org.apache.rocketmq.dashboard.config.RMQConfigure;
|
||||||
import org.apache.rocketmq.dashboard.model.request.SendTopicMessageRequest;
|
import org.apache.rocketmq.dashboard.model.request.SendTopicMessageRequest;
|
||||||
import org.apache.rocketmq.dashboard.model.request.TopicConfigInfo;
|
import org.apache.rocketmq.dashboard.model.request.TopicConfigInfo;
|
||||||
|
import org.apache.rocketmq.dashboard.model.request.TopicTypeList;
|
||||||
|
import org.apache.rocketmq.dashboard.model.request.TopicTypeMeta;
|
||||||
import org.apache.rocketmq.dashboard.service.AbstractCommonService;
|
import org.apache.rocketmq.dashboard.service.AbstractCommonService;
|
||||||
import org.apache.rocketmq.dashboard.service.TopicService;
|
import org.apache.rocketmq.dashboard.service.TopicService;
|
||||||
import org.apache.rocketmq.remoting.RPCHook;
|
import org.apache.rocketmq.remoting.RPCHook;
|
||||||
|
import org.apache.rocketmq.remoting.protocol.admin.TopicStatsTable;
|
||||||
|
import org.apache.rocketmq.remoting.protocol.body.ClusterInfo;
|
||||||
|
import org.apache.rocketmq.remoting.protocol.body.GroupList;
|
||||||
|
import org.apache.rocketmq.remoting.protocol.body.TopicList;
|
||||||
|
import org.apache.rocketmq.remoting.protocol.route.BrokerData;
|
||||||
|
import org.apache.rocketmq.remoting.protocol.route.TopicRouteData;
|
||||||
import org.apache.rocketmq.tools.command.CommandUtil;
|
import org.apache.rocketmq.tools.command.CommandUtil;
|
||||||
import org.joor.Reflect;
|
import org.joor.Reflect;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.ArrayBlockingQueue;
|
import java.util.concurrent.ArrayBlockingQueue;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static org.apache.rocketmq.common.TopicAttributes.TOPIC_MESSAGE_TYPE_ATTRIBUTE;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class TopicServiceImpl extends AbstractCommonService implements TopicService {
|
public class TopicServiceImpl extends AbstractCommonService implements TopicService {
|
||||||
@@ -68,23 +82,59 @@ public class TopicServiceImpl extends AbstractCommonService implements TopicServ
|
|||||||
TopicList allTopics = mqAdminExt.fetchAllTopicList();
|
TopicList allTopics = mqAdminExt.fetchAllTopicList();
|
||||||
TopicList sysTopics = getSystemTopicList();
|
TopicList sysTopics = getSystemTopicList();
|
||||||
Set<String> topics =
|
Set<String> topics =
|
||||||
allTopics.getTopicList().stream().map(topic -> {
|
allTopics.getTopicList().stream().map(topic -> {
|
||||||
if (!skipSysProcess && sysTopics.getTopicList().contains(topic)) {
|
if (!skipSysProcess && sysTopics.getTopicList().contains(topic)) {
|
||||||
topic = String.format("%s%s", "%SYS%", topic);
|
topic = String.format("%s%s", "%SYS%", topic);
|
||||||
}
|
}
|
||||||
return topic;
|
return topic;
|
||||||
}).filter(topic -> {
|
}).filter(topic -> {
|
||||||
if (skipRetryAndDlq) {
|
if (skipRetryAndDlq) {
|
||||||
return !(topic.startsWith(MixAll.RETRY_GROUP_TOPIC_PREFIX)
|
return !(topic.startsWith(MixAll.RETRY_GROUP_TOPIC_PREFIX)
|
||||||
|| topic.startsWith(MixAll.DLQ_GROUP_TOPIC_PREFIX));
|
|| topic.startsWith(MixAll.DLQ_GROUP_TOPIC_PREFIX));
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}).collect(Collectors.toSet());
|
}).collect(Collectors.toSet());
|
||||||
allTopics.getTopicList().clear();
|
allTopics.getTopicList().clear();
|
||||||
allTopics.getTopicList().addAll(topics);
|
allTopics.getTopicList().addAll(topics);
|
||||||
return allTopics;
|
return allTopics;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TopicTypeList examineAllTopicType() {
|
||||||
|
ArrayList<TopicTypeMeta> topicTypes = new ArrayList<>();
|
||||||
|
ArrayList<String> names = new ArrayList<>();
|
||||||
|
ArrayList<String> messageTypes = new ArrayList<>();
|
||||||
|
TopicList topicList = fetchAllTopicList(false, false);
|
||||||
|
checkTopicType(topicList, topicTypes);
|
||||||
|
topicTypes.sort((t1, t2) -> t1.getTopicName().compareTo(t2.getTopicName()));
|
||||||
|
for (TopicTypeMeta topicTypeMeta : topicTypes) {
|
||||||
|
names.add(topicTypeMeta.getTopicName());
|
||||||
|
messageTypes.add(topicTypeMeta.getMessageType());
|
||||||
|
}
|
||||||
|
return new TopicTypeList(names, messageTypes);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkTopicType(TopicList topicList, ArrayList<TopicTypeMeta> topicTypes) {
|
||||||
|
for (String topicName : topicList.getTopicList()) {
|
||||||
|
TopicTypeMeta topicType = new TopicTypeMeta();
|
||||||
|
topicType.setTopicName(topicName);
|
||||||
|
if (topicName.startsWith("%R")) {
|
||||||
|
topicType.setMessageType("RETRY");
|
||||||
|
} else if (topicName.startsWith("%D")) {
|
||||||
|
topicType.setMessageType("DELAY");
|
||||||
|
} else if (topicName.startsWith("%S")) {
|
||||||
|
topicType.setMessageType("SYSTEM");
|
||||||
|
} else {
|
||||||
|
List<TopicConfigInfo> topicConfigInfos = examineTopicConfig(topicName);
|
||||||
|
if (!CollectionUtils.isEmpty(topicConfigInfos)) {
|
||||||
|
topicType.setMessageType(topicConfigInfos.get(0).getMessageType());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
topicTypes.add(topicType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -93,7 +143,8 @@ public class TopicServiceImpl extends AbstractCommonService implements TopicServ
|
|||||||
try {
|
try {
|
||||||
return mqAdminExt.examineTopicStats(topic);
|
return mqAdminExt.examineTopicStats(topic);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,7 +153,8 @@ public class TopicServiceImpl extends AbstractCommonService implements TopicServ
|
|||||||
try {
|
try {
|
||||||
return mqAdminExt.examineTopicRouteInfo(topic);
|
return mqAdminExt.examineTopicRouteInfo(topic);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
throw Throwables.propagate(ex);
|
Throwables.throwIfUnchecked(ex);
|
||||||
|
throw new RuntimeException(ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,7 +163,8 @@ public class TopicServiceImpl extends AbstractCommonService implements TopicServ
|
|||||||
try {
|
try {
|
||||||
return mqAdminExt.queryTopicConsumeByWho(topic);
|
return mqAdminExt.queryTopicConsumeByWho(topic);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -119,14 +172,20 @@ public class TopicServiceImpl extends AbstractCommonService implements TopicServ
|
|||||||
public void createOrUpdate(TopicConfigInfo topicCreateOrUpdateRequest) {
|
public void createOrUpdate(TopicConfigInfo topicCreateOrUpdateRequest) {
|
||||||
TopicConfig topicConfig = new TopicConfig();
|
TopicConfig topicConfig = new TopicConfig();
|
||||||
BeanUtils.copyProperties(topicCreateOrUpdateRequest, topicConfig);
|
BeanUtils.copyProperties(topicCreateOrUpdateRequest, topicConfig);
|
||||||
|
String messageType = topicCreateOrUpdateRequest.getMessageType();
|
||||||
|
if (StringUtils.isBlank(messageType)) {
|
||||||
|
messageType = TopicMessageType.NORMAL.name();
|
||||||
|
}
|
||||||
|
topicConfig.setAttributes(ImmutableMap.of("+".concat(TOPIC_MESSAGE_TYPE_ATTRIBUTE.getName()), messageType));
|
||||||
try {
|
try {
|
||||||
ClusterInfo clusterInfo = mqAdminExt.examineBrokerClusterInfo();
|
ClusterInfo clusterInfo = mqAdminExt.examineBrokerClusterInfo();
|
||||||
for (String brokerName : changeToBrokerNameSet(clusterInfo.getClusterAddrTable(),
|
for (String brokerName : changeToBrokerNameSet(clusterInfo.getClusterAddrTable(),
|
||||||
topicCreateOrUpdateRequest.getClusterNameList(), topicCreateOrUpdateRequest.getBrokerNameList())) {
|
topicCreateOrUpdateRequest.getClusterNameList(), topicCreateOrUpdateRequest.getBrokerNameList())) {
|
||||||
mqAdminExt.createAndUpdateTopicConfig(clusterInfo.getBrokerAddrTable().get(brokerName).selectBrokerAddr(), topicConfig);
|
mqAdminExt.createAndUpdateTopicConfig(clusterInfo.getBrokerAddrTable().get(brokerName).selectBrokerAddr(), topicConfig);
|
||||||
}
|
}
|
||||||
} catch (Exception err) {
|
} catch (Exception err) {
|
||||||
throw Throwables.propagate(err);
|
Throwables.throwIfUnchecked(err);
|
||||||
|
throw new RuntimeException(err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -137,7 +196,8 @@ public class TopicServiceImpl extends AbstractCommonService implements TopicServ
|
|||||||
clusterInfo = mqAdminExt.examineBrokerClusterInfo();
|
clusterInfo = mqAdminExt.examineBrokerClusterInfo();
|
||||||
return mqAdminExt.examineTopicConfig(clusterInfo.getBrokerAddrTable().get(brokerName).selectBrokerAddr(), topic);
|
return mqAdminExt.examineTopicConfig(clusterInfo.getBrokerAddrTable().get(brokerName).selectBrokerAddr(), topic);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -150,6 +210,11 @@ public class TopicServiceImpl extends AbstractCommonService implements TopicServ
|
|||||||
TopicConfig topicConfig = examineTopicConfig(topic, brokerData.getBrokerName());
|
TopicConfig topicConfig = examineTopicConfig(topic, brokerData.getBrokerName());
|
||||||
BeanUtils.copyProperties(topicConfig, topicConfigInfo);
|
BeanUtils.copyProperties(topicConfig, topicConfigInfo);
|
||||||
topicConfigInfo.setBrokerNameList(Lists.newArrayList(brokerData.getBrokerName()));
|
topicConfigInfo.setBrokerNameList(Lists.newArrayList(brokerData.getBrokerName()));
|
||||||
|
String messageType = topicConfig.getAttributes().get(TOPIC_MESSAGE_TYPE_ATTRIBUTE.getName());
|
||||||
|
if (StringUtils.isBlank(messageType)) {
|
||||||
|
messageType = TopicMessageType.UNSPECIFIED.name();
|
||||||
|
}
|
||||||
|
topicConfigInfo.setMessageType(messageType);
|
||||||
topicConfigInfoList.add(topicConfigInfo);
|
topicConfigInfoList.add(topicConfigInfo);
|
||||||
}
|
}
|
||||||
return topicConfigInfoList;
|
return topicConfigInfoList;
|
||||||
@@ -170,7 +235,8 @@ public class TopicServiceImpl extends AbstractCommonService implements TopicServ
|
|||||||
}
|
}
|
||||||
mqAdminExt.deleteTopicInNameServer(nameServerSet, topic);
|
mqAdminExt.deleteTopicInNameServer(nameServerSet, topic);
|
||||||
} catch (Exception err) {
|
} catch (Exception err) {
|
||||||
throw Throwables.propagate(err);
|
Throwables.throwIfUnchecked(err);
|
||||||
|
throw new RuntimeException(err);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -181,7 +247,8 @@ public class TopicServiceImpl extends AbstractCommonService implements TopicServ
|
|||||||
try {
|
try {
|
||||||
clusterInfo = mqAdminExt.examineBrokerClusterInfo();
|
clusterInfo = mqAdminExt.examineBrokerClusterInfo();
|
||||||
} catch (Exception err) {
|
} catch (Exception err) {
|
||||||
throw Throwables.propagate(err);
|
Throwables.throwIfUnchecked(err);
|
||||||
|
throw new RuntimeException(err);
|
||||||
}
|
}
|
||||||
for (String clusterName : clusterInfo.getClusterAddrTable().keySet()) {
|
for (String clusterName : clusterInfo.getClusterAddrTable().keySet()) {
|
||||||
deleteTopic(topic, clusterName);
|
deleteTopic(topic, clusterName);
|
||||||
@@ -197,11 +264,13 @@ public class TopicServiceImpl extends AbstractCommonService implements TopicServ
|
|||||||
try {
|
try {
|
||||||
clusterInfo = mqAdminExt.examineBrokerClusterInfo();
|
clusterInfo = mqAdminExt.examineBrokerClusterInfo();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
mqAdminExt.deleteTopicInBroker(Sets.newHashSet(clusterInfo.getBrokerAddrTable().get(brokerName).selectBrokerAddr()), topic);
|
mqAdminExt.deleteTopicInBroker(Sets.newHashSet(clusterInfo.getBrokerAddrTable().get(brokerName).selectBrokerAddr()), topic);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -216,6 +285,12 @@ public class TopicServiceImpl extends AbstractCommonService implements TopicServ
|
|||||||
return defaultMQProducer;
|
return defaultMQProducer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public TransactionMQProducer buildTransactionMQProducer(String producerGroup, RPCHook rpcHook, boolean traceEnabled) {
|
||||||
|
TransactionMQProducer defaultMQProducer = new TransactionMQProducer(null, producerGroup, rpcHook, traceEnabled, TopicValidator.RMQ_SYS_TRACE_TOPIC);
|
||||||
|
defaultMQProducer.setUseTLS(configure.isUseTLS());
|
||||||
|
return defaultMQProducer;
|
||||||
|
}
|
||||||
|
|
||||||
private TopicList getSystemTopicList() {
|
private TopicList getSystemTopicList() {
|
||||||
RPCHook rpcHook = null;
|
RPCHook rpcHook = null;
|
||||||
boolean isEnableAcl = !StringUtils.isEmpty(configure.getAccessKey()) && !StringUtils.isEmpty(configure.getSecretKey());
|
boolean isEnableAcl = !StringUtils.isEmpty(configure.getAccessKey()) && !StringUtils.isEmpty(configure.getSecretKey());
|
||||||
@@ -230,7 +305,8 @@ public class TopicServiceImpl extends AbstractCommonService implements TopicServ
|
|||||||
producer.start();
|
producer.start();
|
||||||
return producer.getDefaultMQProducerImpl().getmQClientFactory().getMQClientAPIImpl().getSystemTopicList(20000L);
|
return producer.getDefaultMQProducerImpl().getmQClientFactory().getMQClientAPIImpl().getSystemTopicList(20000L);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
} finally {
|
} finally {
|
||||||
producer.shutdown();
|
producer.shutdown();
|
||||||
}
|
}
|
||||||
@@ -238,31 +314,61 @@ public class TopicServiceImpl extends AbstractCommonService implements TopicServ
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SendResult sendTopicMessageRequest(SendTopicMessageRequest sendTopicMessageRequest) {
|
public SendResult sendTopicMessageRequest(SendTopicMessageRequest sendTopicMessageRequest) {
|
||||||
DefaultMQProducer producer = null;
|
List<TopicConfigInfo> topicConfigInfos = examineTopicConfig(sendTopicMessageRequest.getTopic());
|
||||||
|
String messageType = topicConfigInfos.get(0).getMessageType();
|
||||||
AclClientRPCHook rpcHook = null;
|
AclClientRPCHook rpcHook = null;
|
||||||
if (configure.isACLEnabled()) {
|
if (configure.isACLEnabled()) {
|
||||||
rpcHook = new AclClientRPCHook(new SessionCredentials(
|
rpcHook = new AclClientRPCHook(new SessionCredentials(
|
||||||
configure.getAccessKey(),
|
configure.getAccessKey(),
|
||||||
configure.getSecretKey()
|
configure.getSecretKey()
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
producer = buildDefaultMQProducer(MixAll.SELF_TEST_PRODUCER_GROUP, rpcHook, sendTopicMessageRequest.isTraceEnabled());
|
if (TopicMessageType.TRANSACTION.getValue().equals(messageType)) {
|
||||||
producer.setInstanceName(String.valueOf(System.currentTimeMillis()));
|
// transaction message
|
||||||
producer.setNamesrvAddr(configure.getNamesrvAddr());
|
TransactionListener transactionListener = new TransactionListenerImpl();
|
||||||
try {
|
|
||||||
producer.start();
|
TransactionMQProducer producer = buildTransactionMQProducer(MixAll.SELF_TEST_PRODUCER_GROUP, rpcHook, sendTopicMessageRequest.isTraceEnabled());
|
||||||
Message msg = new Message(sendTopicMessageRequest.getTopic(),
|
producer.setInstanceName(String.valueOf(System.currentTimeMillis()));
|
||||||
sendTopicMessageRequest.getTag(),
|
producer.setNamesrvAddr(configure.getNamesrvAddr());
|
||||||
sendTopicMessageRequest.getKey(),
|
producer.setTransactionListener(transactionListener);
|
||||||
sendTopicMessageRequest.getMessageBody().getBytes()
|
try {
|
||||||
);
|
producer.start();
|
||||||
return producer.send(msg);
|
Message msg = new Message(sendTopicMessageRequest.getTopic(),
|
||||||
} catch (Exception e) {
|
sendTopicMessageRequest.getTag(),
|
||||||
throw Throwables.propagate(e);
|
sendTopicMessageRequest.getKey(),
|
||||||
} finally {
|
sendTopicMessageRequest.getMessageBody().getBytes()
|
||||||
waitSendTraceFinish(producer, sendTopicMessageRequest.isTraceEnabled());
|
);
|
||||||
producer.shutdown();
|
return producer.sendMessageInTransaction(msg, null);
|
||||||
|
} catch (Exception e) {
|
||||||
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
} finally {
|
||||||
|
waitSendTraceFinish(producer, sendTopicMessageRequest.isTraceEnabled());
|
||||||
|
producer.shutdown();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// no transaction message
|
||||||
|
DefaultMQProducer producer = null;
|
||||||
|
producer = buildDefaultMQProducer(MixAll.SELF_TEST_PRODUCER_GROUP, rpcHook, sendTopicMessageRequest.isTraceEnabled());
|
||||||
|
producer.setInstanceName(String.valueOf(System.currentTimeMillis()));
|
||||||
|
producer.setNamesrvAddr(configure.getNamesrvAddr());
|
||||||
|
try {
|
||||||
|
producer.start();
|
||||||
|
Message msg = new Message(sendTopicMessageRequest.getTopic(),
|
||||||
|
sendTopicMessageRequest.getTag(),
|
||||||
|
sendTopicMessageRequest.getKey(),
|
||||||
|
sendTopicMessageRequest.getMessageBody().getBytes()
|
||||||
|
);
|
||||||
|
return producer.send(msg);
|
||||||
|
} catch (Exception e) {
|
||||||
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
} finally {
|
||||||
|
waitSendTraceFinish(producer, sendTopicMessageRequest.isTraceEnabled());
|
||||||
|
producer.shutdown();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void waitSendTraceFinish(DefaultMQProducer producer, boolean traceEnabled) {
|
private void waitSendTraceFinish(DefaultMQProducer producer, boolean traceEnabled) {
|
||||||
@@ -284,4 +390,20 @@ public class TopicServiceImpl extends AbstractCommonService implements TopicServ
|
|||||||
} catch (Exception ignore) {
|
} catch (Exception ignore) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static class TransactionListenerImpl implements TransactionListener {
|
||||||
|
private AtomicInteger transactionIndex = new AtomicInteger(0);
|
||||||
|
|
||||||
|
private ConcurrentHashMap<String, Integer> localTrans = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LocalTransactionState executeLocalTransaction(Message msg, Object arg) {
|
||||||
|
return LocalTransactionState.COMMIT_MESSAGE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LocalTransactionState checkLocalTransaction(MessageExt msg) {
|
||||||
|
return LocalTransactionState.COMMIT_MESSAGE;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,10 +24,10 @@ import java.util.List;
|
|||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.rocketmq.common.MixAll;
|
import org.apache.rocketmq.common.MixAll;
|
||||||
import org.apache.rocketmq.common.protocol.body.BrokerStatsData;
|
import org.apache.rocketmq.remoting.protocol.body.BrokerStatsData;
|
||||||
import org.apache.rocketmq.common.protocol.body.GroupList;
|
import org.apache.rocketmq.remoting.protocol.body.GroupList;
|
||||||
import org.apache.rocketmq.common.protocol.route.BrokerData;
|
import org.apache.rocketmq.remoting.protocol.route.BrokerData;
|
||||||
import org.apache.rocketmq.common.protocol.route.TopicRouteData;
|
import org.apache.rocketmq.remoting.protocol.route.TopicRouteData;
|
||||||
import org.apache.rocketmq.dashboard.service.DashboardCollectService;
|
import org.apache.rocketmq.dashboard.service.DashboardCollectService;
|
||||||
import org.apache.rocketmq.store.stats.BrokerStatsManager;
|
import org.apache.rocketmq.store.stats.BrokerStatsManager;
|
||||||
import org.apache.rocketmq.tools.admin.MQAdminExt;
|
import org.apache.rocketmq.tools.admin.MQAdminExt;
|
||||||
@@ -93,7 +93,8 @@ public class CollectTaskRunnble implements Runnable {
|
|||||||
try {
|
try {
|
||||||
list = dashboardCollectService.getTopicMap().get(topic);
|
list = dashboardCollectService.getTopicMap().get(topic);
|
||||||
} catch (ExecutionException e) {
|
} catch (ExecutionException e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
if (null == list) {
|
if (null == list) {
|
||||||
list = Lists.newArrayList();
|
list = Lists.newArrayList();
|
||||||
|
|||||||
@@ -34,10 +34,10 @@ import java.util.Set;
|
|||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import org.apache.rocketmq.common.MixAll;
|
import org.apache.rocketmq.common.MixAll;
|
||||||
import org.apache.rocketmq.common.protocol.body.ClusterInfo;
|
import org.apache.rocketmq.remoting.protocol.body.ClusterInfo;
|
||||||
import org.apache.rocketmq.common.protocol.body.KVTable;
|
import org.apache.rocketmq.remoting.protocol.body.KVTable;
|
||||||
import org.apache.rocketmq.common.protocol.body.TopicList;
|
import org.apache.rocketmq.remoting.protocol.body.TopicList;
|
||||||
import org.apache.rocketmq.common.protocol.route.BrokerData;
|
import org.apache.rocketmq.remoting.protocol.route.BrokerData;
|
||||||
import org.apache.rocketmq.common.topic.TopicValidator;
|
import org.apache.rocketmq.common.topic.TopicValidator;
|
||||||
import org.apache.rocketmq.dashboard.config.RMQConfigure;
|
import org.apache.rocketmq.dashboard.config.RMQConfigure;
|
||||||
import org.apache.rocketmq.dashboard.service.DashboardCollectService;
|
import org.apache.rocketmq.dashboard.service.DashboardCollectService;
|
||||||
@@ -84,7 +84,8 @@ public class DashboardCollectTask {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception err) {
|
catch (Exception err) {
|
||||||
throw Throwables.propagate(err);
|
Throwables.throwIfUnchecked(err);
|
||||||
|
throw new RuntimeException(err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -128,7 +129,8 @@ public class DashboardCollectTask {
|
|||||||
log.debug("Broker Collected Data in memory = {}" + JsonUtil.obj2String(dashboardCollectService.getBrokerMap().asMap()));
|
log.debug("Broker Collected Data in memory = {}" + JsonUtil.obj2String(dashboardCollectService.getBrokerMap().asMap()));
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -144,10 +146,12 @@ public class DashboardCollectTask {
|
|||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
}
|
}
|
||||||
catch (InterruptedException e1) {
|
catch (InterruptedException e1) {
|
||||||
throw Throwables.propagate(e1);
|
Throwables.throwIfUnchecked(e1);
|
||||||
|
throw new RuntimeException(e1);
|
||||||
}
|
}
|
||||||
fetchBrokerRuntimeStats(brokerAddr, retryTime - 1);
|
fetchBrokerRuntimeStats(brokerAddr, retryTime - 1);
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -197,7 +201,8 @@ public class DashboardCollectTask {
|
|||||||
|
|
||||||
}
|
}
|
||||||
catch (IOException e) {
|
catch (IOException e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -250,7 +255,7 @@ public class DashboardCollectTask {
|
|||||||
|
|
||||||
private void addSystemTopic() throws Exception {
|
private void addSystemTopic() throws Exception {
|
||||||
ClusterInfo clusterInfo = mqAdminExt.examineBrokerClusterInfo();
|
ClusterInfo clusterInfo = mqAdminExt.examineBrokerClusterInfo();
|
||||||
HashMap<String, Set<String>> clusterTable = clusterInfo.getClusterAddrTable();
|
Map<String, Set<String>> clusterTable = clusterInfo.getClusterAddrTable();
|
||||||
for (Map.Entry<String, Set<String>> entry : clusterTable.entrySet()) {
|
for (Map.Entry<String, Set<String>> entry : clusterTable.entrySet()) {
|
||||||
String clusterName = entry.getKey();
|
String clusterName = entry.getKey();
|
||||||
TopicValidator.addSystemTopic(clusterName);
|
TopicValidator.addSystemTopic(clusterName);
|
||||||
|
|||||||
@@ -42,7 +42,9 @@ rocketmq:
|
|||||||
# configure multiple namesrv addresses to manage multiple different clusters
|
# configure multiple namesrv addresses to manage multiple different clusters
|
||||||
namesrvAddrs:
|
namesrvAddrs:
|
||||||
- 127.0.0.1:9876
|
- 127.0.0.1:9876
|
||||||
- 127.0.0.2:9876
|
# - 127.0.0.2:9876
|
||||||
|
# - 10.151.47.32:9876;10.151.47.33:9876;10.151.47.34:9876
|
||||||
|
# - 10.151.47.30:9876
|
||||||
# if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true
|
# if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true
|
||||||
isVIPChannel:
|
isVIPChannel:
|
||||||
# timeout for mqadminExt, default 5000ms
|
# timeout for mqadminExt, default 5000ms
|
||||||
@@ -58,8 +60,8 @@ rocketmq:
|
|||||||
loginRequired: false
|
loginRequired: false
|
||||||
useTLS: false
|
useTLS: false
|
||||||
# set the accessKey and secretKey if you used acl
|
# set the accessKey and secretKey if you used acl
|
||||||
accessKey: # if version > 4.4.0
|
# accessKey: rocketmq2
|
||||||
secretKey: # if version > 4.4.0
|
# secretKey: 12345678
|
||||||
|
|
||||||
threadpool:
|
threadpool:
|
||||||
config:
|
config:
|
||||||
|
|||||||
@@ -15,10 +15,17 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
app.controller('AppCtrl', ['$scope','$window','$translate','$http','Notification', function ($scope,$window,$translate, $http, Notification) {
|
app.controller('AppCtrl', ['$scope','$window','$translate','$http','Notification', function ($scope,$window,$translate, $http, Notification) {
|
||||||
|
$scope.rmqVersion = localStorage.getItem("isV5") === "true" ? true : false;
|
||||||
|
|
||||||
$scope.changeTranslate = function(langKey){
|
$scope.changeTranslate = function(langKey){
|
||||||
$translate.use(langKey);
|
$translate.use(langKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$scope.changeRMQVersion = function (version) {
|
||||||
|
$scope.rmqVersion = version === 5;
|
||||||
|
localStorage.setItem("isV5", $scope.rmqVersion);
|
||||||
|
}
|
||||||
|
|
||||||
$scope.logout = function(){
|
$scope.logout = function(){
|
||||||
$http({
|
$http({
|
||||||
method: "POST",
|
method: "POST",
|
||||||
|
|||||||
@@ -54,9 +54,12 @@ var en = {
|
|||||||
"RESET_CUS_OFFSET": "Reset Consumer Offset",
|
"RESET_CUS_OFFSET": "Reset Consumer Offset",
|
||||||
"DELETE": "Delete",
|
"DELETE": "Delete",
|
||||||
"CHANGE_LANG": "ChangeLanguage",
|
"CHANGE_LANG": "ChangeLanguage",
|
||||||
|
"CHANGE_VERSION": "ChangeVersion",
|
||||||
"BROKER": "Broker",
|
"BROKER": "Broker",
|
||||||
"NORMAL": "NORMAL",
|
"NORMAL": "NORMAL",
|
||||||
"RETRY": "RETRY",
|
"RETRY": "RETRY",
|
||||||
|
"FIFO": "FIFO",
|
||||||
|
"TRANSACTION": "TRANSACTION",
|
||||||
"DLQ": "DLQ",
|
"DLQ": "DLQ",
|
||||||
"QUANTITY":"Quantity",
|
"QUANTITY":"Quantity",
|
||||||
"TYPE":"Type",
|
"TYPE":"Type",
|
||||||
@@ -123,5 +126,11 @@ var en = {
|
|||||||
"GROUP_PERM":"Group Permission",
|
"GROUP_PERM":"Group Permission",
|
||||||
"SYNCHRONIZE":"Synchronize Data",
|
"SYNCHRONIZE":"Synchronize Data",
|
||||||
"SHOW":"Show",
|
"SHOW":"Show",
|
||||||
"HIDE":"Hide"
|
"HIDE":"Hide",
|
||||||
|
"MESSAGE_TYPE":"messageType",
|
||||||
|
"MESSAGE_TYPE_UNSPECIFIED": "UNSPECIFIED, is NORMAL",
|
||||||
|
"MESSAGE_TYPE_NORMAL": "NORMAL",
|
||||||
|
"MESSAGE_TYPE_FIFO": "FIFO",
|
||||||
|
"MESSAGE_TYPE_DELAY": "DELAY",
|
||||||
|
"MESSAGE_TYPE_TRANSACTION": "TRANSACTION",
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,9 +55,12 @@ var zh = {
|
|||||||
"SKIP_MESSAGE_ACCUMULATE":"跳过堆积",
|
"SKIP_MESSAGE_ACCUMULATE":"跳过堆积",
|
||||||
"DELETE": "删除",
|
"DELETE": "删除",
|
||||||
"CHANGE_LANG": "更换语言",
|
"CHANGE_LANG": "更换语言",
|
||||||
|
"CHANGE_VERSION": "更换版本",
|
||||||
"BROKER": "Broker",
|
"BROKER": "Broker",
|
||||||
"NORMAL": "普通",
|
"NORMAL": "普通",
|
||||||
"RETRY": "重试",
|
"RETRY": "重试",
|
||||||
|
"FIFO": "顺序",
|
||||||
|
"TRANSACTION": "事务",
|
||||||
"DLQ": "死信",
|
"DLQ": "死信",
|
||||||
"QUANTITY":"数量",
|
"QUANTITY":"数量",
|
||||||
"TYPE":"类型",
|
"TYPE":"类型",
|
||||||
@@ -124,5 +127,11 @@ var zh = {
|
|||||||
"GROUP_PERM":"消费组权限",
|
"GROUP_PERM":"消费组权限",
|
||||||
"SYNCHRONIZE":"同步",
|
"SYNCHRONIZE":"同步",
|
||||||
"SHOW":"显示",
|
"SHOW":"显示",
|
||||||
"HIDE":"隐藏"
|
"HIDE":"隐藏",
|
||||||
|
"MESSAGE_TYPE":"消息类型",
|
||||||
|
"MESSAGE_TYPE_UNSPECIFIED": "未指定,为普通消息",
|
||||||
|
"MESSAGE_TYPE_NORMAL": "普通消息",
|
||||||
|
"MESSAGE_TYPE_FIFO": "顺序消息",
|
||||||
|
"MESSAGE_TYPE_DELAY": "定时/延时消息",
|
||||||
|
"MESSAGE_TYPE_TRANSACTION": "事务消息",
|
||||||
}
|
}
|
||||||
@@ -45,24 +45,30 @@ module.controller('topicController', ['$scope', 'ngDialog', '$http', 'Notificati
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
$scope.filterNormal = true
|
$scope.filterNormal = true
|
||||||
|
$scope.filterDelay = false
|
||||||
|
$scope.filterFifo = false
|
||||||
|
$scope.filterTransaction = false
|
||||||
$scope.filterRetry = false
|
$scope.filterRetry = false
|
||||||
$scope.filterDLQ = false
|
$scope.filterDLQ = false
|
||||||
$scope.filterSystem = false
|
$scope.filterSystem = false
|
||||||
$scope.allTopicList = [];
|
$scope.allTopicList = [];
|
||||||
|
$scope.allTopicNameList = [];
|
||||||
|
$scope.allMessageTypeList = [];
|
||||||
$scope.topicShowList = [];
|
$scope.topicShowList = [];
|
||||||
$scope.userRole = $window.sessionStorage.getItem("userrole");
|
$scope.userRole = $window.sessionStorage.getItem("userrole");
|
||||||
$scope.writeOperationEnabled = $scope.userRole == null ? true : ($scope.userRole == 1 ? true : false);
|
$scope.writeOperationEnabled = $scope.userRole == null ? true : ($scope.userRole == 1 ? true : false);
|
||||||
|
|
||||||
$scope.refreshTopicList = function () {
|
$scope.refreshTopicList = function () {
|
||||||
$http({
|
$http({
|
||||||
method: "GET",
|
method: "GET",
|
||||||
url: "topic/list.query"
|
url: "topic/list.queryTopicType"
|
||||||
}).success(function (resp) {
|
}).success(function (resp) {
|
||||||
if (resp.status == 0) {
|
if (resp.status == 0) {
|
||||||
$scope.allTopicList = resp.data.topicList.sort();
|
$scope.allTopicNameList = resp.data.topicNameList;
|
||||||
console.log($scope.allTopicList);
|
$scope.allMessageTypeList = resp.data.messageTypeList;
|
||||||
|
console.log($scope.allTopicNameList);
|
||||||
console.log(JSON.stringify(resp));
|
console.log(JSON.stringify(resp));
|
||||||
$scope.showTopicList(1, $scope.allTopicList.length);
|
$scope.showTopicList(1, $scope.allTopicNameList.length);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
Notification.error({message: resp.errMsg, delay: 5000});
|
Notification.error({message: resp.errMsg, delay: 5000});
|
||||||
@@ -79,6 +85,15 @@ module.controller('topicController', ['$scope', 'ngDialog', '$http', 'Notificati
|
|||||||
$scope.$watch('filterNormal', function () {
|
$scope.$watch('filterNormal', function () {
|
||||||
$scope.filterList(1);
|
$scope.filterList(1);
|
||||||
});
|
});
|
||||||
|
$scope.$watch('filterFifo', function () {
|
||||||
|
$scope.filterList(1);
|
||||||
|
});
|
||||||
|
$scope.$watch('filterTransaction', function () {
|
||||||
|
$scope.filterList(1);
|
||||||
|
});
|
||||||
|
$scope.$watch('filterDelay', function () {
|
||||||
|
$scope.filterList(1);
|
||||||
|
});
|
||||||
$scope.$watch('filterRetry', function () {
|
$scope.$watch('filterRetry', function () {
|
||||||
$scope.filterList(1);
|
$scope.filterList(1);
|
||||||
});
|
});
|
||||||
@@ -92,13 +107,13 @@ module.controller('topicController', ['$scope', 'ngDialog', '$http', 'Notificati
|
|||||||
var lowExceptStr = $scope.filterStr.toLowerCase();
|
var lowExceptStr = $scope.filterStr.toLowerCase();
|
||||||
var canShowList = [];
|
var canShowList = [];
|
||||||
|
|
||||||
$scope.allTopicList.forEach(function (element) {
|
for (let i = 0; i < $scope.allTopicNameList.length; ++i) {
|
||||||
if ($scope.filterByType(element)) {
|
if ($scope.filterByType($scope.allTopicNameList[i], $scope.allMessageTypeList[i])) {
|
||||||
if (element.toLowerCase().indexOf(lowExceptStr) != -1) {
|
if ($scope.allTopicNameList[i].toLowerCase().indexOf(lowExceptStr) != -1) {
|
||||||
canShowList.push(element);
|
canShowList.push($scope.allTopicNameList[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
$scope.paginationConf.totalItems = canShowList.length;
|
$scope.paginationConf.totalItems = canShowList.length;
|
||||||
var perPage = $scope.paginationConf.itemsPerPage;
|
var perPage = $scope.paginationConf.itemsPerPage;
|
||||||
var from = (currentPage - 1) * perPage;
|
var from = (currentPage - 1) * perPage;
|
||||||
@@ -106,7 +121,7 @@ module.controller('topicController', ['$scope', 'ngDialog', '$http', 'Notificati
|
|||||||
$scope.topicShowList = canShowList.slice(from, to);
|
$scope.topicShowList = canShowList.slice(from, to);
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.filterByType = function (str) {
|
$scope.filterByType = function (str, type) {
|
||||||
if ($scope.filterRetry) {
|
if ($scope.filterRetry) {
|
||||||
if (str.startsWith("%R")) {
|
if (str.startsWith("%R")) {
|
||||||
return true
|
return true
|
||||||
@@ -123,7 +138,22 @@ module.controller('topicController', ['$scope', 'ngDialog', '$http', 'Notificati
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($scope.filterNormal) {
|
if ($scope.filterNormal) {
|
||||||
if (str.startsWith("%") == false) {
|
if (type.includes("NORMAL")) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($scope.filterDelay) {
|
||||||
|
if (type.includes("DELAY")) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($scope.filterFifo) {
|
||||||
|
if (type.includes("FIFO")) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($scope.filterTransaction) {
|
||||||
|
if (type.includes("TRANSACTION")) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -138,10 +168,10 @@ module.controller('topicController', ['$scope', 'ngDialog', '$http', 'Notificati
|
|||||||
var perPage = $scope.paginationConf.itemsPerPage;
|
var perPage = $scope.paginationConf.itemsPerPage;
|
||||||
var from = (currentPage - 1) * perPage;
|
var from = (currentPage - 1) * perPage;
|
||||||
var to = (from + perPage) > totalItem ? totalItem : from + perPage;
|
var to = (from + perPage) > totalItem ? totalItem : from + perPage;
|
||||||
console.log($scope.allTopicList);
|
console.log($scope.allTopicNameList);
|
||||||
console.log(from)
|
console.log(from)
|
||||||
console.log(to)
|
console.log(to)
|
||||||
$scope.topicShowList = $scope.allTopicList.slice(from, to);
|
$scope.topicShowList = $scope.allTopicNameList.slice(from, to);
|
||||||
$scope.paginationConf.totalItems = totalItem;
|
$scope.paginationConf.totalItems = totalItem;
|
||||||
console.log($scope.topicShowList)
|
console.log($scope.topicShowList)
|
||||||
console.log($scope.paginationConf.totalItems)
|
console.log($scope.paginationConf.totalItems)
|
||||||
@@ -328,8 +358,8 @@ module.controller('topicController', ['$scope', 'ngDialog', '$http', 'Notificati
|
|||||||
var bIsUpdate = true;
|
var bIsUpdate = true;
|
||||||
if (request == null) {
|
if (request == null) {
|
||||||
request = [{
|
request = [{
|
||||||
writeQueueNums: 16,
|
writeQueueNums: 8,
|
||||||
readQueueNums: 16,
|
readQueueNums: 8,
|
||||||
perm: 6,
|
perm: 6,
|
||||||
order: false,
|
order: false,
|
||||||
topicName: "",
|
topicName: "",
|
||||||
@@ -355,6 +385,7 @@ module.controller('topicController', ['$scope', 'ngDialog', '$http', 'Notificati
|
|||||||
topicRequestList: request,
|
topicRequestList: request,
|
||||||
allClusterNameList: Object.keys(resp.data.clusterInfo.clusterAddrTable),
|
allClusterNameList: Object.keys(resp.data.clusterInfo.clusterAddrTable),
|
||||||
allBrokerNameList: Object.keys(resp.data.brokerServer),
|
allBrokerNameList: Object.keys(resp.data.brokerServer),
|
||||||
|
allMessageTypeList: resp.data.messageTypes,
|
||||||
bIsUpdate: bIsUpdate,
|
bIsUpdate: bIsUpdate,
|
||||||
writeOperationEnabled: $scope.writeOperationEnabled
|
writeOperationEnabled: $scope.writeOperationEnabled
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,6 +47,14 @@
|
|||||||
<li><a href="javascript:void(0)" ng-click="changeTranslate('zh')">Simplified Chinese</a></li>
|
<li><a href="javascript:void(0)" ng-click="changeTranslate('zh')">Simplified Chinese</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
<li class="dropdown">
|
||||||
|
<a href="bootstrap-elements.html" data-target="#" class="dropdown-toggle" data-toggle="dropdown">{{'CHANGE_VERSION' | translate}}
|
||||||
|
<b class="caret"></b></a>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<li><a href="javascript:void(0)" ng-click="changeRMQVersion(5)">RocketMQ 5.x</a></li>
|
||||||
|
<li><a href="javascript:void(0)" ng-click="changeRMQVersion(4)">RocketMQ 4.x</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
<li class="dropdown" ng-show="username != ''">
|
<li class="dropdown" ng-show="username != ''">
|
||||||
<a href="bootstrap-elements.html" data-target="#" class="dropdown-toggle" data-toggle="dropdown">{{username}}
|
<a href="bootstrap-elements.html" data-target="#" class="dropdown-toggle" data-toggle="dropdown">{{username}}
|
||||||
<b class="caret"></b></a>
|
<b class="caret"></b></a>
|
||||||
|
|||||||
@@ -50,7 +50,14 @@
|
|||||||
<td class="text-center">{{instance.address}}</td>
|
<td class="text-center">{{instance.address}}</td>
|
||||||
<td class="text-center">{{instance.brokerVersionDesc}}</td>
|
<td class="text-center">{{instance.brokerVersionDesc}}</td>
|
||||||
<td class="text-center">{{instance.putTps.split(' ')[0]| number:2}}</td>
|
<td class="text-center">{{instance.putTps.split(' ')[0]| number:2}}</td>
|
||||||
<td class="text-center">{{instance.getTransferedTps.split(' ')[0]| number:2}}</td>
|
<td class="text-center">
|
||||||
|
<span ng-if="!instance.getTransferedTps || !instance.getTransferedTps.trim()">
|
||||||
|
{{instance.getTransferredTps.split(' ')[0] | number:2}}
|
||||||
|
</span>
|
||||||
|
<span ng-if="instance.getTransferedTps && instance.getTransferedTps.trim()">
|
||||||
|
{{instance.getTransferedTps.split(' ')[0] | number:2}}
|
||||||
|
</span>
|
||||||
|
</td>
|
||||||
<td class="text-center">{{instance.msgPutTotalTodayMorning -
|
<td class="text-center">{{instance.msgPutTotalTodayMorning -
|
||||||
instance.msgPutTotalYesterdayMorning}}
|
instance.msgPutTotalYesterdayMorning}}
|
||||||
</td>
|
</td>
|
||||||
|
|||||||
@@ -24,6 +24,12 @@
|
|||||||
</div>
|
</div>
|
||||||
<md-checkbox aria-label="Checkbox" ng-model="filterNormal" class="md-primary">{{'NORMAL' | translate}}
|
<md-checkbox aria-label="Checkbox" ng-model="filterNormal" class="md-primary">{{'NORMAL' | translate}}
|
||||||
</md-checkbox>
|
</md-checkbox>
|
||||||
|
<md-checkbox aria-label="Checkbox" ng-model="filterDelay" class="md-primary" ng-show="rmqVersion">{{'DELAY' | translate}}
|
||||||
|
</md-checkbox>
|
||||||
|
<md-checkbox aria-label="Checkbox" ng-model="filterFifo" class="md-primary" ng-show="rmqVersion">{{'FIFO' | translate}}
|
||||||
|
</md-checkbox>
|
||||||
|
<md-checkbox aria-label="Checkbox" ng-model="filterTransaction" class="md-primary" ng-show="rmqVersion">{{'TRANSACTION' | translate}}
|
||||||
|
</md-checkbox>
|
||||||
<md-checkbox aria-label="Checkbox" ng-model="filterRetry" class="md-primary">{{'RETRY' | translate}}
|
<md-checkbox aria-label="Checkbox" ng-model="filterRetry" class="md-primary">{{'RETRY' | translate}}
|
||||||
</md-checkbox>
|
</md-checkbox>
|
||||||
<md-checkbox aria-label="Checkbox" ng-model="filterDLQ" class="md-primary">{{'DLQ' | translate}}
|
<md-checkbox aria-label="Checkbox" ng-model="filterDLQ" class="md-primary">{{'DLQ' | translate}}
|
||||||
@@ -63,6 +69,7 @@
|
|||||||
<button class="btn btn-raised btn-sm btn-primary" type="button"
|
<button class="btn btn-raised btn-sm btn-primary" type="button"
|
||||||
ng-click="openUpdateDialog(topic, sysFlag)">topic {{'CONFIG' |translate}}
|
ng-click="openUpdateDialog(topic, sysFlag)">topic {{'CONFIG' |translate}}
|
||||||
</button>
|
</button>
|
||||||
|
<!-- todo 发送消息,根据消息类型判断-->
|
||||||
<button class="btn btn-raised btn-sm btn-primary" type="button"
|
<button class="btn btn-raised btn-sm btn-primary" type="button"
|
||||||
ng-show="{{!sysFlag}}"
|
ng-show="{{!sysFlag}}"
|
||||||
ng-click="openSendTopicMessageDialog(topic)">{{'SEND_MSG' | translate}}
|
ng-click="openSendTopicMessageDialog(topic)">{{'SEND_MSG' | translate}}
|
||||||
@@ -189,6 +196,18 @@
|
|||||||
<span class="text-danger" ng-show="addAppForm.topicName.$error.required">{{'TOPIC_NAME'|translate}}不能为空.</span>
|
<span class="text-danger" ng-show="addAppForm.topicName.$error.required">{{'TOPIC_NAME'|translate}}不能为空.</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- 设置topic 类型 -->
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="control-label col-sm-2">{{'MESSAGE_TYPE'|translate}}:</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<select name="mySelectMessageType" chosen ng-disabled="ngDialogData.bIsUpdate"
|
||||||
|
ng-model="item.messageType"
|
||||||
|
ng-options="messageType as value | translate disable when messageType=='UNSPECIFIED' for (messageType , value) in ngDialogData.allMessageTypeList"
|
||||||
|
>
|
||||||
|
<option value=""></option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-sm-2">{{'WRITE_QUEUE_NUMS'|translate}}:</label>
|
<label class="control-label col-sm-2">{{'WRITE_QUEUE_NUMS'|translate}}:</label>
|
||||||
<div class="col-sm-10">
|
<div class="col-sm-10">
|
||||||
|
|||||||
@@ -34,27 +34,27 @@ import org.apache.rocketmq.client.impl.MQClientAPIImpl;
|
|||||||
import org.apache.rocketmq.client.impl.factory.MQClientInstance;
|
import org.apache.rocketmq.client.impl.factory.MQClientInstance;
|
||||||
import org.apache.rocketmq.common.PlainAccessConfig;
|
import org.apache.rocketmq.common.PlainAccessConfig;
|
||||||
import org.apache.rocketmq.common.TopicConfig;
|
import org.apache.rocketmq.common.TopicConfig;
|
||||||
import org.apache.rocketmq.common.admin.ConsumeStats;
|
import org.apache.rocketmq.remoting.protocol.admin.ConsumeStats;
|
||||||
import org.apache.rocketmq.common.admin.RollbackStats;
|
import org.apache.rocketmq.remoting.protocol.admin.RollbackStats;
|
||||||
import org.apache.rocketmq.common.admin.TopicStatsTable;
|
import org.apache.rocketmq.remoting.protocol.admin.TopicStatsTable;
|
||||||
import org.apache.rocketmq.common.message.MessageExt;
|
import org.apache.rocketmq.common.message.MessageExt;
|
||||||
import org.apache.rocketmq.common.message.MessageQueue;
|
import org.apache.rocketmq.common.message.MessageQueue;
|
||||||
import org.apache.rocketmq.common.protocol.ResponseCode;
|
import org.apache.rocketmq.remoting.protocol.ResponseCode;
|
||||||
import org.apache.rocketmq.common.protocol.body.BrokerStatsData;
|
import org.apache.rocketmq.remoting.protocol.body.BrokerStatsData;
|
||||||
import org.apache.rocketmq.common.protocol.body.ClusterInfo;
|
import org.apache.rocketmq.remoting.protocol.body.ClusterInfo;
|
||||||
import org.apache.rocketmq.common.protocol.body.ConsumeMessageDirectlyResult;
|
import org.apache.rocketmq.remoting.protocol.body.ConsumeMessageDirectlyResult;
|
||||||
import org.apache.rocketmq.common.protocol.body.ConsumeStatsList;
|
import org.apache.rocketmq.remoting.protocol.body.ConsumeStatsList;
|
||||||
import org.apache.rocketmq.common.protocol.body.ConsumerConnection;
|
import org.apache.rocketmq.remoting.protocol.body.ConsumerConnection;
|
||||||
import org.apache.rocketmq.common.protocol.body.ConsumerRunningInfo;
|
import org.apache.rocketmq.remoting.protocol.body.ConsumerRunningInfo;
|
||||||
import org.apache.rocketmq.common.protocol.body.GroupList;
|
import org.apache.rocketmq.remoting.protocol.body.GroupList;
|
||||||
import org.apache.rocketmq.common.protocol.body.KVTable;
|
import org.apache.rocketmq.remoting.protocol.body.KVTable;
|
||||||
import org.apache.rocketmq.common.protocol.body.ProducerConnection;
|
import org.apache.rocketmq.remoting.protocol.body.ProducerConnection;
|
||||||
import org.apache.rocketmq.common.protocol.body.QueueTimeSpan;
|
import org.apache.rocketmq.remoting.protocol.body.QueueTimeSpan;
|
||||||
import org.apache.rocketmq.common.protocol.body.SubscriptionGroupWrapper;
|
import org.apache.rocketmq.remoting.protocol.body.SubscriptionGroupWrapper;
|
||||||
import org.apache.rocketmq.common.protocol.body.TopicConfigSerializeWrapper;
|
import org.apache.rocketmq.remoting.protocol.body.TopicConfigSerializeWrapper;
|
||||||
import org.apache.rocketmq.common.protocol.body.TopicList;
|
import org.apache.rocketmq.remoting.protocol.body.TopicList;
|
||||||
import org.apache.rocketmq.common.protocol.route.TopicRouteData;
|
import org.apache.rocketmq.remoting.protocol.route.TopicRouteData;
|
||||||
import org.apache.rocketmq.common.subscription.SubscriptionGroupConfig;
|
import org.apache.rocketmq.remoting.protocol.subscription.SubscriptionGroupConfig;
|
||||||
import org.apache.rocketmq.dashboard.service.client.MQAdminExtImpl;
|
import org.apache.rocketmq.dashboard.service.client.MQAdminExtImpl;
|
||||||
import org.apache.rocketmq.dashboard.service.client.MQAdminInstance;
|
import org.apache.rocketmq.dashboard.service.client.MQAdminInstance;
|
||||||
import org.apache.rocketmq.dashboard.util.MockObjectUtil;
|
import org.apache.rocketmq.dashboard.util.MockObjectUtil;
|
||||||
@@ -82,6 +82,7 @@ import static org.mockito.ArgumentMatchers.any;
|
|||||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||||
import static org.mockito.ArgumentMatchers.anyInt;
|
import static org.mockito.ArgumentMatchers.anyInt;
|
||||||
import static org.mockito.ArgumentMatchers.anyLong;
|
import static org.mockito.ArgumentMatchers.anyLong;
|
||||||
|
import static org.mockito.ArgumentMatchers.anyMap;
|
||||||
import static org.mockito.ArgumentMatchers.anyString;
|
import static org.mockito.ArgumentMatchers.anyString;
|
||||||
import static org.mockito.Mockito.doNothing;
|
import static org.mockito.Mockito.doNothing;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
@@ -570,11 +571,13 @@ public class MQAdminExtImplTest {
|
|||||||
public void testCreateTopic() throws Exception {
|
public void testCreateTopic() throws Exception {
|
||||||
assertNotNull(mqAdminExtImpl);
|
assertNotNull(mqAdminExtImpl);
|
||||||
{
|
{
|
||||||
doNothing().when(defaultMQAdminExt).createTopic(anyString(), anyString(), anyInt());
|
doNothing().when(defaultMQAdminExt).createTopic(anyString(), anyString(), anyInt(), anyMap());
|
||||||
doNothing().when(defaultMQAdminExt).createTopic(anyString(), anyString(), anyInt(), anyInt());
|
doNothing().when(defaultMQAdminExt).createTopic(anyString(), anyString(), anyInt(), anyInt(), anyMap());
|
||||||
}
|
}
|
||||||
mqAdminExtImpl.createTopic("key", "topic_test", 8);
|
Map<String, String> map = new HashMap<>();
|
||||||
mqAdminExtImpl.createTopic("key", "topic_test", 8, 1);
|
map.put("message.type", "FIFO");
|
||||||
|
mqAdminExtImpl.createTopic("key", "topic_test", 8, map);
|
||||||
|
mqAdminExtImpl.createTopic("key", "topic_test", 8, 1, map);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ package org.apache.rocketmq.dashboard.admin;
|
|||||||
|
|
||||||
import org.apache.commons.pool2.PooledObject;
|
import org.apache.commons.pool2.PooledObject;
|
||||||
import org.apache.commons.pool2.impl.GenericObjectPool;
|
import org.apache.commons.pool2.impl.GenericObjectPool;
|
||||||
import org.apache.rocketmq.common.protocol.body.ClusterInfo;
|
import org.apache.rocketmq.remoting.protocol.body.ClusterInfo;
|
||||||
import org.apache.rocketmq.dashboard.config.RMQConfigure;
|
import org.apache.rocketmq.dashboard.config.RMQConfigure;
|
||||||
import org.apache.rocketmq.dashboard.util.MockObjectUtil;
|
import org.apache.rocketmq.dashboard.util.MockObjectUtil;
|
||||||
import org.apache.rocketmq.tools.admin.MQAdminExt;
|
import org.apache.rocketmq.tools.admin.MQAdminExt;
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ import com.google.common.collect.Lists;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import org.apache.rocketmq.common.AclConfig;
|
import org.apache.rocketmq.common.AclConfig;
|
||||||
import org.apache.rocketmq.common.PlainAccessConfig;
|
import org.apache.rocketmq.common.PlainAccessConfig;
|
||||||
import org.apache.rocketmq.common.protocol.body.ClusterInfo;
|
import org.apache.rocketmq.remoting.protocol.body.ClusterInfo;
|
||||||
import org.apache.rocketmq.dashboard.model.request.AclRequest;
|
import org.apache.rocketmq.dashboard.model.request.AclRequest;
|
||||||
import org.apache.rocketmq.dashboard.service.impl.AclServiceImpl;
|
import org.apache.rocketmq.dashboard.service.impl.AclServiceImpl;
|
||||||
import org.apache.rocketmq.dashboard.util.MockObjectUtil;
|
import org.apache.rocketmq.dashboard.util.MockObjectUtil;
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ package org.apache.rocketmq.dashboard.controller;
|
|||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import org.apache.rocketmq.common.protocol.body.ClusterInfo;
|
import org.apache.rocketmq.remoting.protocol.body.ClusterInfo;
|
||||||
import org.apache.rocketmq.common.protocol.body.KVTable;
|
import org.apache.rocketmq.remoting.protocol.body.KVTable;
|
||||||
import org.apache.rocketmq.dashboard.service.impl.ClusterServiceImpl;
|
import org.apache.rocketmq.dashboard.service.impl.ClusterServiceImpl;
|
||||||
import org.apache.rocketmq.dashboard.util.MockObjectUtil;
|
import org.apache.rocketmq.dashboard.util.MockObjectUtil;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|||||||
@@ -23,17 +23,17 @@ import java.util.HashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import org.apache.rocketmq.client.exception.MQClientException;
|
import org.apache.rocketmq.client.exception.MQClientException;
|
||||||
import org.apache.rocketmq.common.admin.ConsumeStats;
|
import org.apache.rocketmq.remoting.protocol.admin.ConsumeStats;
|
||||||
import org.apache.rocketmq.common.admin.RollbackStats;
|
import org.apache.rocketmq.remoting.protocol.admin.RollbackStats;
|
||||||
import org.apache.rocketmq.common.message.MessageQueue;
|
import org.apache.rocketmq.common.message.MessageQueue;
|
||||||
import org.apache.rocketmq.common.protocol.ResponseCode;
|
import org.apache.rocketmq.remoting.protocol.ResponseCode;
|
||||||
import org.apache.rocketmq.common.protocol.body.ClusterInfo;
|
import org.apache.rocketmq.remoting.protocol.body.ClusterInfo;
|
||||||
import org.apache.rocketmq.common.protocol.body.ConsumerConnection;
|
import org.apache.rocketmq.remoting.protocol.body.ConsumerConnection;
|
||||||
import org.apache.rocketmq.common.protocol.body.ConsumerRunningInfo;
|
import org.apache.rocketmq.remoting.protocol.body.ConsumerRunningInfo;
|
||||||
import org.apache.rocketmq.common.protocol.body.SubscriptionGroupWrapper;
|
import org.apache.rocketmq.remoting.protocol.body.SubscriptionGroupWrapper;
|
||||||
import org.apache.rocketmq.common.protocol.heartbeat.ConsumeType;
|
import org.apache.rocketmq.remoting.protocol.heartbeat.ConsumeType;
|
||||||
import org.apache.rocketmq.common.protocol.heartbeat.MessageModel;
|
import org.apache.rocketmq.remoting.protocol.heartbeat.MessageModel;
|
||||||
import org.apache.rocketmq.common.subscription.SubscriptionGroupConfig;
|
import org.apache.rocketmq.remoting.protocol.subscription.SubscriptionGroupConfig;
|
||||||
import org.apache.rocketmq.dashboard.model.request.ConsumerConfigInfo;
|
import org.apache.rocketmq.dashboard.model.request.ConsumerConfigInfo;
|
||||||
import org.apache.rocketmq.dashboard.model.request.DeleteSubGroupRequest;
|
import org.apache.rocketmq.dashboard.model.request.DeleteSubGroupRequest;
|
||||||
import org.apache.rocketmq.dashboard.model.request.ResetOffsetRequest;
|
import org.apache.rocketmq.dashboard.model.request.ResetOffsetRequest;
|
||||||
@@ -67,6 +67,7 @@ public class ConsumerControllerTest extends BaseControllerTest {
|
|||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void init() throws Exception {
|
public void init() throws Exception {
|
||||||
|
consumerService.afterPropertiesSet();
|
||||||
super.mockRmqConfigure();
|
super.mockRmqConfigure();
|
||||||
ClusterInfo clusterInfo = MockObjectUtil.createClusterInfo();
|
ClusterInfo clusterInfo = MockObjectUtil.createClusterInfo();
|
||||||
when(mqAdminExt.examineBrokerClusterInfo()).thenReturn(clusterInfo);
|
when(mqAdminExt.examineBrokerClusterInfo()).thenReturn(clusterInfo);
|
||||||
@@ -93,9 +94,10 @@ public class ConsumerControllerTest extends BaseControllerTest {
|
|||||||
perform = mockMvc.perform(requestBuilder);
|
perform = mockMvc.perform(requestBuilder);
|
||||||
perform.andExpect(status().isOk())
|
perform.andExpect(status().isOk())
|
||||||
.andExpect(jsonPath("$.data", hasSize(2)))
|
.andExpect(jsonPath("$.data", hasSize(2)))
|
||||||
.andExpect(jsonPath("$.data[0].group").value("group_test"))
|
|
||||||
.andExpect(jsonPath("$.data[0].consumeType").value(ConsumeType.CONSUME_ACTIVELY.name()))
|
.andExpect(jsonPath("$.data[0].consumeType").value(ConsumeType.CONSUME_ACTIVELY.name()))
|
||||||
.andExpect(jsonPath("$.data[0].messageModel").value(MessageModel.CLUSTERING.name()));
|
.andExpect(jsonPath("$.data[0].messageModel").value(MessageModel.CLUSTERING.name()));
|
||||||
|
// executorService shutdown
|
||||||
|
consumerService.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -21,10 +21,10 @@ import com.google.common.collect.Lists;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import org.apache.rocketmq.client.exception.MQClientException;
|
import org.apache.rocketmq.client.exception.MQClientException;
|
||||||
import org.apache.rocketmq.common.MixAll;
|
import org.apache.rocketmq.common.MixAll;
|
||||||
import org.apache.rocketmq.common.protocol.ResponseCode;
|
import org.apache.rocketmq.remoting.protocol.ResponseCode;
|
||||||
import org.apache.rocketmq.common.protocol.body.CMResult;
|
import org.apache.rocketmq.remoting.protocol.body.CMResult;
|
||||||
import org.apache.rocketmq.common.protocol.body.ConsumeMessageDirectlyResult;
|
import org.apache.rocketmq.remoting.protocol.body.ConsumeMessageDirectlyResult;
|
||||||
import org.apache.rocketmq.common.protocol.route.TopicRouteData;
|
import org.apache.rocketmq.remoting.protocol.route.TopicRouteData;
|
||||||
import org.apache.rocketmq.dashboard.model.DlqMessageRequest;
|
import org.apache.rocketmq.dashboard.model.DlqMessageRequest;
|
||||||
import org.apache.rocketmq.dashboard.model.MessagePage;
|
import org.apache.rocketmq.dashboard.model.MessagePage;
|
||||||
import org.apache.rocketmq.dashboard.model.MessageView;
|
import org.apache.rocketmq.dashboard.model.MessageView;
|
||||||
|
|||||||
@@ -32,9 +32,9 @@ import org.apache.rocketmq.client.exception.MQClientException;
|
|||||||
import org.apache.rocketmq.common.message.MessageClientIDSetter;
|
import org.apache.rocketmq.common.message.MessageClientIDSetter;
|
||||||
import org.apache.rocketmq.common.message.MessageExt;
|
import org.apache.rocketmq.common.message.MessageExt;
|
||||||
import org.apache.rocketmq.common.message.MessageQueue;
|
import org.apache.rocketmq.common.message.MessageQueue;
|
||||||
import org.apache.rocketmq.common.protocol.body.CMResult;
|
import org.apache.rocketmq.remoting.protocol.body.CMResult;
|
||||||
import org.apache.rocketmq.common.protocol.body.ConsumeMessageDirectlyResult;
|
import org.apache.rocketmq.remoting.protocol.body.ConsumeMessageDirectlyResult;
|
||||||
import org.apache.rocketmq.common.protocol.body.ConsumerConnection;
|
import org.apache.rocketmq.remoting.protocol.body.ConsumerConnection;
|
||||||
import org.apache.rocketmq.dashboard.model.QueueOffsetInfo;
|
import org.apache.rocketmq.dashboard.model.QueueOffsetInfo;
|
||||||
import org.apache.rocketmq.dashboard.model.request.MessageQuery;
|
import org.apache.rocketmq.dashboard.model.request.MessageQuery;
|
||||||
import org.apache.rocketmq.dashboard.service.impl.MessageServiceImpl;
|
import org.apache.rocketmq.dashboard.service.impl.MessageServiceImpl;
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ package org.apache.rocketmq.dashboard.controller;
|
|||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import org.apache.rocketmq.client.exception.MQClientException;
|
import org.apache.rocketmq.client.exception.MQClientException;
|
||||||
import org.apache.rocketmq.common.protocol.body.Connection;
|
import org.apache.rocketmq.remoting.protocol.body.Connection;
|
||||||
import org.apache.rocketmq.common.protocol.body.ProducerConnection;
|
import org.apache.rocketmq.remoting.protocol.body.ProducerConnection;
|
||||||
import org.apache.rocketmq.dashboard.interceptor.AuthInterceptor;
|
import org.apache.rocketmq.dashboard.interceptor.AuthInterceptor;
|
||||||
import org.apache.rocketmq.dashboard.service.impl.LoginServiceImpl;
|
import org.apache.rocketmq.dashboard.service.impl.LoginServiceImpl;
|
||||||
import org.apache.rocketmq.dashboard.service.impl.ProducerServiceImpl;
|
import org.apache.rocketmq.dashboard.service.impl.ProducerServiceImpl;
|
||||||
|
|||||||
@@ -29,16 +29,16 @@ import org.apache.rocketmq.client.producer.DefaultMQProducer;
|
|||||||
import org.apache.rocketmq.client.producer.SendResult;
|
import org.apache.rocketmq.client.producer.SendResult;
|
||||||
import org.apache.rocketmq.client.producer.SendStatus;
|
import org.apache.rocketmq.client.producer.SendStatus;
|
||||||
import org.apache.rocketmq.common.TopicConfig;
|
import org.apache.rocketmq.common.TopicConfig;
|
||||||
import org.apache.rocketmq.common.admin.ConsumeStats;
|
import org.apache.rocketmq.remoting.protocol.admin.ConsumeStats;
|
||||||
import org.apache.rocketmq.common.admin.TopicStatsTable;
|
import org.apache.rocketmq.remoting.protocol.admin.TopicStatsTable;
|
||||||
import org.apache.rocketmq.common.message.Message;
|
import org.apache.rocketmq.common.message.Message;
|
||||||
import org.apache.rocketmq.common.message.MessageQueue;
|
import org.apache.rocketmq.common.message.MessageQueue;
|
||||||
import org.apache.rocketmq.common.protocol.body.ClusterInfo;
|
import org.apache.rocketmq.remoting.protocol.body.ClusterInfo;
|
||||||
import org.apache.rocketmq.common.protocol.body.ConsumerConnection;
|
import org.apache.rocketmq.remoting.protocol.body.ConsumerConnection;
|
||||||
import org.apache.rocketmq.common.protocol.body.ConsumerRunningInfo;
|
import org.apache.rocketmq.remoting.protocol.body.ConsumerRunningInfo;
|
||||||
import org.apache.rocketmq.common.protocol.body.GroupList;
|
import org.apache.rocketmq.remoting.protocol.body.GroupList;
|
||||||
import org.apache.rocketmq.common.protocol.body.TopicList;
|
import org.apache.rocketmq.remoting.protocol.body.TopicList;
|
||||||
import org.apache.rocketmq.common.protocol.route.TopicRouteData;
|
import org.apache.rocketmq.remoting.protocol.route.TopicRouteData;
|
||||||
import org.apache.rocketmq.dashboard.model.request.SendTopicMessageRequest;
|
import org.apache.rocketmq.dashboard.model.request.SendTopicMessageRequest;
|
||||||
import org.apache.rocketmq.dashboard.model.request.TopicConfigInfo;
|
import org.apache.rocketmq.dashboard.model.request.TopicConfigInfo;
|
||||||
import org.apache.rocketmq.dashboard.service.impl.ConsumerServiceImpl;
|
import org.apache.rocketmq.dashboard.service.impl.ConsumerServiceImpl;
|
||||||
|
|||||||
@@ -33,12 +33,12 @@ import java.util.Set;
|
|||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import org.apache.rocketmq.common.MixAll;
|
import org.apache.rocketmq.common.MixAll;
|
||||||
import org.apache.rocketmq.common.protocol.body.BrokerStatsData;
|
import org.apache.rocketmq.remoting.protocol.body.BrokerStatsData;
|
||||||
import org.apache.rocketmq.common.protocol.body.ClusterInfo;
|
import org.apache.rocketmq.remoting.protocol.body.ClusterInfo;
|
||||||
import org.apache.rocketmq.common.protocol.body.GroupList;
|
import org.apache.rocketmq.remoting.protocol.body.GroupList;
|
||||||
import org.apache.rocketmq.common.protocol.body.KVTable;
|
import org.apache.rocketmq.remoting.protocol.body.KVTable;
|
||||||
import org.apache.rocketmq.common.protocol.body.TopicList;
|
import org.apache.rocketmq.remoting.protocol.body.TopicList;
|
||||||
import org.apache.rocketmq.common.protocol.route.TopicRouteData;
|
import org.apache.rocketmq.remoting.protocol.route.TopicRouteData;
|
||||||
import org.apache.rocketmq.dashboard.BaseTest;
|
import org.apache.rocketmq.dashboard.BaseTest;
|
||||||
import org.apache.rocketmq.dashboard.config.CollectExecutorConfig;
|
import org.apache.rocketmq.dashboard.config.CollectExecutorConfig;
|
||||||
import org.apache.rocketmq.dashboard.config.RMQConfigure;
|
import org.apache.rocketmq.dashboard.config.RMQConfigure;
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ import org.apache.rocketmq.client.producer.SendResult;
|
|||||||
import org.apache.rocketmq.common.consumer.ConsumeFromWhere;
|
import org.apache.rocketmq.common.consumer.ConsumeFromWhere;
|
||||||
import org.apache.rocketmq.common.message.Message;
|
import org.apache.rocketmq.common.message.Message;
|
||||||
import org.apache.rocketmq.common.message.MessageExt;
|
import org.apache.rocketmq.common.message.MessageExt;
|
||||||
import org.apache.rocketmq.common.subscription.SubscriptionGroupConfig;
|
import org.apache.rocketmq.remoting.protocol.subscription.SubscriptionGroupConfig;
|
||||||
import org.apache.rocketmq.dashboard.model.request.ConsumerConfigInfo;
|
import org.apache.rocketmq.dashboard.model.request.ConsumerConfigInfo;
|
||||||
import org.apache.rocketmq.dashboard.model.request.TopicConfigInfo;
|
import org.apache.rocketmq.dashboard.model.request.TopicConfigInfo;
|
||||||
import org.apache.rocketmq.dashboard.service.ConsumerService;
|
import org.apache.rocketmq.dashboard.service.ConsumerService;
|
||||||
@@ -78,7 +78,8 @@ public abstract class RocketMQConsoleTestBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
throw Throwables.propagate(exception);
|
Throwables.throwIfUnchecked(exception);
|
||||||
|
throw new RuntimeException(exception);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -91,7 +92,8 @@ public abstract class RocketMQConsoleTestBase {
|
|||||||
producer.start();
|
producer.start();
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -137,7 +139,8 @@ public abstract class RocketMQConsoleTestBase {
|
|||||||
consumer.start();
|
consumer.start();
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
throw Throwables.propagate(e);
|
Throwables.throwIfUnchecked(e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -33,39 +33,39 @@ import org.apache.rocketmq.client.producer.LocalTransactionState;
|
|||||||
import org.apache.rocketmq.client.trace.TraceConstants;
|
import org.apache.rocketmq.client.trace.TraceConstants;
|
||||||
import org.apache.rocketmq.client.trace.TraceType;
|
import org.apache.rocketmq.client.trace.TraceType;
|
||||||
import org.apache.rocketmq.common.AclConfig;
|
import org.apache.rocketmq.common.AclConfig;
|
||||||
import org.apache.rocketmq.common.DataVersion;
|
import org.apache.rocketmq.remoting.protocol.DataVersion;
|
||||||
import org.apache.rocketmq.common.MixAll;
|
import org.apache.rocketmq.common.MixAll;
|
||||||
import org.apache.rocketmq.common.PlainAccessConfig;
|
import org.apache.rocketmq.common.PlainAccessConfig;
|
||||||
import org.apache.rocketmq.common.TopicConfig;
|
import org.apache.rocketmq.common.TopicConfig;
|
||||||
import org.apache.rocketmq.common.admin.ConsumeStats;
|
import org.apache.rocketmq.remoting.protocol.admin.ConsumeStats;
|
||||||
import org.apache.rocketmq.common.admin.OffsetWrapper;
|
import org.apache.rocketmq.remoting.protocol.admin.OffsetWrapper;
|
||||||
import org.apache.rocketmq.common.admin.TopicOffset;
|
import org.apache.rocketmq.remoting.protocol.admin.TopicOffset;
|
||||||
import org.apache.rocketmq.common.admin.TopicStatsTable;
|
import org.apache.rocketmq.remoting.protocol.admin.TopicStatsTable;
|
||||||
import org.apache.rocketmq.common.consumer.ConsumeFromWhere;
|
import org.apache.rocketmq.common.consumer.ConsumeFromWhere;
|
||||||
import org.apache.rocketmq.common.message.MessageExt;
|
import org.apache.rocketmq.common.message.MessageExt;
|
||||||
import org.apache.rocketmq.common.message.MessageQueue;
|
import org.apache.rocketmq.common.message.MessageQueue;
|
||||||
import org.apache.rocketmq.common.protocol.body.BrokerStatsData;
|
import org.apache.rocketmq.remoting.protocol.body.BrokerStatsData;
|
||||||
import org.apache.rocketmq.common.protocol.body.BrokerStatsItem;
|
import org.apache.rocketmq.remoting.protocol.body.BrokerStatsItem;
|
||||||
import org.apache.rocketmq.common.protocol.body.ClusterInfo;
|
import org.apache.rocketmq.remoting.protocol.body.ClusterInfo;
|
||||||
import org.apache.rocketmq.common.protocol.body.Connection;
|
import org.apache.rocketmq.remoting.protocol.body.Connection;
|
||||||
import org.apache.rocketmq.common.protocol.body.ConsumeStatus;
|
import org.apache.rocketmq.remoting.protocol.body.ConsumeStatus;
|
||||||
import org.apache.rocketmq.common.protocol.body.ConsumerConnection;
|
import org.apache.rocketmq.remoting.protocol.body.ConsumerConnection;
|
||||||
import org.apache.rocketmq.common.protocol.body.ConsumerRunningInfo;
|
import org.apache.rocketmq.remoting.protocol.body.ConsumerRunningInfo;
|
||||||
import org.apache.rocketmq.common.protocol.body.ProcessQueueInfo;
|
import org.apache.rocketmq.remoting.protocol.body.ProcessQueueInfo;
|
||||||
import org.apache.rocketmq.common.protocol.body.SubscriptionGroupWrapper;
|
import org.apache.rocketmq.remoting.protocol.body.SubscriptionGroupWrapper;
|
||||||
import org.apache.rocketmq.common.protocol.body.TopicConfigSerializeWrapper;
|
import org.apache.rocketmq.remoting.protocol.body.TopicConfigSerializeWrapper;
|
||||||
import org.apache.rocketmq.common.protocol.heartbeat.ConsumeType;
|
import org.apache.rocketmq.remoting.protocol.heartbeat.ConsumeType;
|
||||||
import org.apache.rocketmq.common.protocol.heartbeat.MessageModel;
|
import org.apache.rocketmq.remoting.protocol.heartbeat.MessageModel;
|
||||||
import org.apache.rocketmq.common.protocol.heartbeat.SubscriptionData;
|
import org.apache.rocketmq.remoting.protocol.heartbeat.SubscriptionData;
|
||||||
import org.apache.rocketmq.common.protocol.route.BrokerData;
|
import org.apache.rocketmq.remoting.protocol.route.BrokerData;
|
||||||
import org.apache.rocketmq.common.protocol.route.QueueData;
|
import org.apache.rocketmq.remoting.protocol.route.QueueData;
|
||||||
import org.apache.rocketmq.common.protocol.route.TopicRouteData;
|
import org.apache.rocketmq.remoting.protocol.route.TopicRouteData;
|
||||||
import org.apache.rocketmq.common.subscription.SubscriptionGroupConfig;
|
import org.apache.rocketmq.remoting.protocol.subscription.SubscriptionGroupConfig;
|
||||||
import org.apache.rocketmq.dashboard.model.DlqMessageRequest;
|
import org.apache.rocketmq.dashboard.model.DlqMessageRequest;
|
||||||
import org.apache.rocketmq.remoting.protocol.LanguageCode;
|
import org.apache.rocketmq.remoting.protocol.LanguageCode;
|
||||||
import org.checkerframework.checker.units.qual.A;
|
import org.checkerframework.checker.units.qual.A;
|
||||||
|
|
||||||
import static org.apache.rocketmq.common.protocol.heartbeat.ConsumeType.CONSUME_ACTIVELY;
|
import static org.apache.rocketmq.remoting.protocol.heartbeat.ConsumeType.CONSUME_ACTIVELY;
|
||||||
|
|
||||||
public class MockObjectUtil {
|
public class MockObjectUtil {
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user