diff --git a/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/bo/ClientVersion.java b/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/bo/ClientVersion.java index 190db6cc..bce263af 100644 --- a/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/bo/ClientVersion.java +++ b/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/bo/ClientVersion.java @@ -3,6 +3,8 @@ import java.util.Date; import java.util.HashSet; import java.util.Set; + +import com.sohu.tv.mq.cloud.util.Jointer; /** * 客户端版本 * @Description: @@ -67,18 +69,7 @@ public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; } public String getOwnersString() { - if(owners == null) { - return ""; - } - StringBuilder sb = new StringBuilder(); - for(User u : owners) { - sb.append(u.notBlankName()); - sb.append(","); - } - if(sb.length() > 0) { - sb.deleteCharAt(sb.length() - 1); - } - return sb.toString(); + return Jointer.BY_COMMA.join(owners, v -> v.notBlankName()); } public boolean addOwner(User owner) { if(owners == null) { diff --git a/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/service/AlarmConfigBridingService.java b/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/service/AlarmConfigBridingService.java index 089cdb85..8484f1d8 100644 --- a/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/service/AlarmConfigBridingService.java +++ b/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/service/AlarmConfigBridingService.java @@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import com.google.common.base.Joiner; import com.sohu.tv.mq.cloud.bo.AlarmConfig; import com.sohu.tv.mq.cloud.bo.NeedAlarmConfig; import com.sohu.tv.mq.cloud.dao.NeedAlarmConfigDao; @@ -164,16 +165,7 @@ public void setConfigTable(List alarmConfigList) { * @return */ private String getKey(String... keys) { - StringBuilder sb = new StringBuilder(); - for (String k : keys) { - sb.append(k); - sb.append("_"); - } - if (sb.length() > 0) { - sb.deleteCharAt(sb.length() - 1); - return sb.toString(); - } - return ""; + return Joiner.on("_").join(keys); } } diff --git a/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/service/ConsumerRetryTrafficService.java b/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/service/ConsumerRetryTrafficService.java index 18bf2497..51133ee8 100644 --- a/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/service/ConsumerRetryTrafficService.java +++ b/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/service/ConsumerRetryTrafficService.java @@ -15,6 +15,7 @@ import com.sohu.tv.mq.cloud.bo.User; import com.sohu.tv.mq.cloud.mq.DefaultInvoke; import com.sohu.tv.mq.cloud.mq.MQAdminTemplate; +import com.sohu.tv.mq.cloud.util.Jointer; import com.sohu.tv.mq.cloud.util.MQCloudConfigHelper; import com.sohu.tv.mq.cloud.util.Result; @@ -72,13 +73,7 @@ public void invoke(MQAdminExt mqAdmin) throws Exception { topicConsumer.getTid(), topicConsumer.getCid()); String email = null; if(userListResult.isNotEmpty()) { - StringBuilder sb = new StringBuilder(); - for(User u : userListResult.getResult()) { - sb.append(u.getEmail()); - sb.append(","); - } - sb.deleteCharAt(sb.length() - 1); - email = sb.toString(); + email = Jointer.BY_COMMA.join(userListResult.getResult(), u -> u.getEmail()); } long consumerFailCount = alarmConfigBridingService.getConsumerFailCount(topicConsumer.getConsumer()); if (consumerFailCount >= 0 && consumerFailCount < topicTraffic.getCount()) { diff --git a/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/service/MessageService.java b/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/service/MessageService.java index b805e78e..9b4c585a 100644 --- a/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/service/MessageService.java +++ b/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/service/MessageService.java @@ -51,6 +51,7 @@ import org.springframework.web.util.HtmlUtils; import com.alibaba.fastjson.JSON; +import com.google.common.base.Joiner; import com.sohu.tv.mq.cloud.bo.Cluster; import com.sohu.tv.mq.cloud.bo.Consumer; import com.sohu.tv.mq.cloud.bo.DecodedMessage; @@ -494,14 +495,8 @@ public List callback(MQAdminExt mqAdmin) throws Exception { return mqAdmin.getNameServerAddressList(); } }); - StringBuilder sb = new StringBuilder(); - for (String str : nsList) { - sb.append(str); - sb.append(";"); - } - sb.deleteCharAt(sb.length() - 1); DefaultMQPullConsumer consumer = new DefaultMQPullConsumer(MixAll.TOOLS_CONSUMER_GROUP, null); - consumer.setNamesrvAddr(sb.toString()); + consumer.setNamesrvAddr(Joiner.on(";").join(nsList)); consumer.setVipChannelEnabled(mqCluster.isEnableVipChannel()); consumer.start(); return consumer; diff --git a/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/service/TrafficService.java b/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/service/TrafficService.java index 09272329..4e2c882d 100644 --- a/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/service/TrafficService.java +++ b/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/service/TrafficService.java @@ -59,7 +59,7 @@ protected void fetchTraffic(MQAdminExt mqAdmin, String topic, String statKey, T if (masterAddr == null) { continue; } - String key = masterAddr + "_" + statKey; + String key = masterAddr + "_" + statKey + "_" + getCountKey(); String value = fetchLocalCache.get(key); if (value != null && ERROR.equals(value)) { if (logger.isDebugEnabled()) { diff --git a/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/service/UserService.java b/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/service/UserService.java index 0a712e07..227b69c1 100644 --- a/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/service/UserService.java +++ b/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/service/UserService.java @@ -22,6 +22,7 @@ import com.sohu.tv.mq.cloud.cache.LocalCache; import com.sohu.tv.mq.cloud.dao.ConsumerDao; import com.sohu.tv.mq.cloud.dao.UserDao; +import com.sohu.tv.mq.cloud.util.Jointer; import com.sohu.tv.mq.cloud.util.Result; import com.sohu.tv.mq.cloud.util.Status; @@ -281,15 +282,7 @@ public String queryMonitorEmail() { logger.error("queryMonitor err", e); } if (userList != null && userList.size() > 0) { - StringBuilder sb = new StringBuilder(); - for (User u : userList) { - sb.append(u.getEmail()); - sb.append(","); - } - if (sb.length() > 0) { - sb.deleteCharAt(sb.length() - 1); - } - email = sb; + email = Jointer.BY_COMMA.join(userList, u -> u.getEmail()); mqLocalCache.put("monitor", email); } } diff --git a/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/task/monitor/MonitorService.java b/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/task/monitor/MonitorService.java index 57270578..d0e724a3 100644 --- a/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/task/monitor/MonitorService.java +++ b/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/task/monitor/MonitorService.java @@ -42,6 +42,7 @@ import com.sohu.tv.mq.cloud.bo.Cluster; import com.sohu.tv.mq.cloud.bo.NameServer; import com.sohu.tv.mq.cloud.service.NameServerService; +import com.sohu.tv.mq.cloud.util.Jointer; import com.sohu.tv.mq.cloud.util.Result; /** @@ -73,13 +74,7 @@ public MonitorService(NameServerService nameServerService, Cluster mqCluster, Mo logger.error("monitor cluster:{} init err!", mqCluster); return; } - StringBuilder sb = new StringBuilder(); - for(NameServer ns : nameServerListResult.getResult()) { - sb.append(ns.getAddr()); - sb.append(";"); - } - sb.deleteCharAt(sb.length() - 1); - this.nsAddr = sb.toString(); + this.nsAddr = Jointer.BY_SEMICOLON.join(nameServerListResult.getResult(), ns -> ns.getAddr()); this.clusterName = mqCluster.getName(); this.monitorListener = monitorListener; diff --git a/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/util/Jointer.java b/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/util/Jointer.java new file mode 100644 index 00000000..44019d90 --- /dev/null +++ b/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/util/Jointer.java @@ -0,0 +1,62 @@ +package com.sohu.tv.mq.cloud.util; + +import java.util.Collection; +import java.util.Iterator; + +/** + * 拼接工具 refrence from com.google.common.base.Joiner + * + * @author yongfeigao + * @date 2019年7月10日 + */ +public class Jointer { + // 拼接分隔符 + private final String separator; + + public static final Jointer BY_COMMA = new Jointer(","); + + public static final Jointer BY_SEMICOLON = new Jointer(";"); + + public static final String BLANK = ""; + + private Jointer(String separator) { + this.separator = separator; + } + + /** + * 遍历collection的对象获取其joinerValue进行拼接 + * @param collection + * @param joinerValue + * @return String + */ + public String join(Collection collection, JointerValue joinerValue) { + if (collection == null || collection.isEmpty()) { + return ""; + } + StringBuilder buffer = new StringBuilder(); + Iterator iterator = collection.iterator(); + buffer.append(joinerValue.getValue(iterator.next())); + while (iterator.hasNext()) { + buffer.append(separator); + buffer.append(joinerValue.getValue(iterator.next())); + } + return buffer.toString(); + } + + /** + * 拼接返回值 + * + * @author yongfeigao + * @date 2019年7月11日 + * @param + */ + public interface JointerValue { + + /** + * 返回打算拼接的字符串 + * @param t + * @return + */ + public String getValue(T t); + } +} diff --git a/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/web/controller/ConsumerController.java b/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/web/controller/ConsumerController.java index 2965cca5..6be658e3 100644 --- a/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/web/controller/ConsumerController.java +++ b/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/web/controller/ConsumerController.java @@ -159,14 +159,16 @@ public String consumeProgress(UserInfo userInfo, @RequestParam("tid") int tid, M if(consumerProgressVO.getRetryTopic() == null) { consumerProgressVO.setRetryTopic(mq.getTopic()); } else if(!mq.getTopic().equals(consumerProgressVO.getRetryTopic())){ - logger.error("retry consumer has two diffrent topic, {} != {}", mq.getTopic(), consumerProgressVO.getRetryTopic()); + logger.error("retry consumer:{} has two diffrent topic, {} != {}", consumer.getName(), + mq.getTopic(), consumerProgressVO.getRetryTopic()); } } else { offsetMap.put(mq, offsetTable.get(mq)); if(consumerProgressVO.getTopic() == null) { consumerProgressVO.setTopic(mq.getTopic()); } else if(!mq.getTopic().equals(consumerProgressVO.getTopic())){ - logger.error("consumer has two diffrent topic, {} != {}", mq.getTopic(), consumerProgressVO.getTopic()); + logger.error("consumer:{} has two diffrent topic, {} != {}", consumer.getName(), + mq.getTopic(), consumerProgressVO.getTopic()); } } } diff --git a/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/web/controller/RocketMQController.java b/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/web/controller/RocketMQController.java index 9269c830..940ebf48 100644 --- a/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/web/controller/RocketMQController.java +++ b/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/web/controller/RocketMQController.java @@ -10,6 +10,7 @@ import com.sohu.tv.mq.cloud.bo.NameServer; import com.sohu.tv.mq.cloud.service.NameServerService; +import com.sohu.tv.mq.cloud.util.Jointer; import com.sohu.tv.mq.cloud.util.Result; /** @@ -34,14 +35,6 @@ public class RocketMQController { @RequestMapping("/nsaddr-{clusterId}") public String nsaddr(@PathVariable int clusterId) throws Exception { Result> result = nameServerService.query(clusterId); - if(result.isNotEmpty()) { - StringBuilder sb = new StringBuilder(); - for(NameServer nameServer : result.getResult()) { - sb.append(nameServer.getAddr()); - sb.append(";"); - } - return sb.toString(); - } - return ""; + return Jointer.BY_SEMICOLON.join(result.getResult(), ns -> ns.getAddr()); } } diff --git a/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/web/controller/TopicController.java b/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/web/controller/TopicController.java index dd5f9fdf..32d0b220 100644 --- a/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/web/controller/TopicController.java +++ b/mq-cloud/src/main/java/com/sohu/tv/mq/cloud/web/controller/TopicController.java @@ -385,6 +385,7 @@ public String connection(UserInfo userInfo, @RequestParam("topic") String topic, @RequestParam("type") int type, Map map) throws Exception { FreemarkerUtil.set("mqVersion", MQVersion.class, map); setResult(map, null); + setResult(map, "client", group); String view = viewModule() + "/connection"; Cluster cluster = clusterService.getMQClusterById(cid); HashSet connectionSet = null; diff --git a/mq-cloud/src/main/resources/static/wiki/userGuide/clientConsumer.md b/mq-cloud/src/main/resources/static/wiki/userGuide/clientConsumer.md index 9789953a..a935fc05 100644 --- a/mq-cloud/src/main/resources/static/wiki/userGuide/clientConsumer.md +++ b/mq-cloud/src/main/resources/static/wiki/userGuide/clientConsumer.md @@ -6,7 +6,7 @@ @Configuration public class MQConfiguration { - @Value("${flushCache.consumer}") + @Value("${flushCache.consumerGroup}") private String flushCacheConsumer; @Value("${flushCache.topic}") diff --git a/mq-cloud/src/main/resources/static/wiki/userGuide/clientProducer.md b/mq-cloud/src/main/resources/static/wiki/userGuide/clientProducer.md index 3472719f..589b2cd7 100644 --- a/mq-cloud/src/main/resources/static/wiki/userGuide/clientProducer.md +++ b/mq-cloud/src/main/resources/static/wiki/userGuide/clientProducer.md @@ -5,7 +5,7 @@ ``` @Configuration public class MQConfiguration { - @Value("${flushCache.producer}") + @Value("${flushCache.producerGroup}") private String flushCacheProducer; @Value("${flushCache.topic}") @@ -18,6 +18,8 @@ public class MQConfiguration { } ``` +producerGroup和topic具体的值,请参考[topic详情页](topic#detail),然后配置到yml或properties里。 + ## 二、初始化之spring xml方式 ``` diff --git a/mq-cloud/src/main/resources/templates/topic/connection.html b/mq-cloud/src/main/resources/templates/topic/connection.html index d8abb202..0205ea5f 100644 --- a/mq-cloud/src/main/resources/templates/topic/connection.html +++ b/mq-cloud/src/main/resources/templates/topic/connection.html @@ -1,5 +1,8 @@ + + + diff --git a/mq-cloud/src/main/resources/templates/user/topicTopology.html b/mq-cloud/src/main/resources/templates/user/topicTopology.html index 7882112d..609eae92 100644 --- a/mq-cloud/src/main/resources/templates/user/topicTopology.html +++ b/mq-cloud/src/main/resources/templates/user/topicTopology.html @@ -152,6 +152,7 @@

拓扑

if(params.data._type){ if(ipCache[params.data._group]){ if(ipCache[params.data._group] != 1 && ipCache[params.data._group] != 2){ + setTimeout("$('body').getNiceScroll().resize()", 500); return ipCache[params.data._group]; } } else { @@ -165,6 +166,7 @@

拓扑

ipCache[params.data._group] = content; callback(ticket, content); console.log($("#ipList").val()); + $('body').getNiceScroll().resize(); }); } } else { diff --git a/mq-cloud/src/test/java/com/sohu/tv/mq/cloud/util/JointerTest.java b/mq-cloud/src/test/java/com/sohu/tv/mq/cloud/util/JointerTest.java new file mode 100644 index 00000000..9cb88b14 --- /dev/null +++ b/mq-cloud/src/test/java/com/sohu/tv/mq/cloud/util/JointerTest.java @@ -0,0 +1,49 @@ +package com.sohu.tv.mq.cloud.util; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Assert; +import org.junit.Test; + +import com.sohu.tv.mq.cloud.bo.User; + +public class JointerTest { + + @Test + public void testJoin() { + List userList = new ArrayList(); + User user = new User(); + user.setEmail("a@sohu.com"); + userList.add(user); + + user = new User(); + user.setEmail("b@sohu.com"); + userList.add(user); + + String result = Jointer.BY_COMMA.join(userList, u -> u.getEmail()); + Assert.assertEquals("a@sohu.com,b@sohu.com", result); + } + + @Test + public void testJoinBlank() { + List userList = new ArrayList(); + String result = Jointer.BY_COMMA.join(userList, u -> u.getEmail()); + Assert.assertEquals("", result); + + userList = null; + result = Jointer.BY_COMMA.join(userList, u -> u.getEmail()); + Assert.assertEquals("", result); + } + + @Test + public void testJoinOne() { + List userList = new ArrayList(); + User user = new User(); + user.setEmail("a@sohu.com"); + userList.add(user); + + String result = Jointer.BY_COMMA.join(userList, u -> u.getEmail()); + Assert.assertEquals("a@sohu.com", result); + } +}
${client}的链接
ClientId 版本