正在显示
7 个修改的文件
包含
248 行增加
和
8 行删除
| @@ -132,6 +132,12 @@ | @@ -132,6 +132,12 @@ | ||
| 132 | </dependency> | 132 | </dependency> |
| 133 | 133 | ||
| 134 | <dependency> | 134 | <dependency> |
| 135 | + <groupId>com.alibaba</groupId> | ||
| 136 | + <artifactId>fastjson</artifactId> | ||
| 137 | + <version>1.2.73</version> | ||
| 138 | + </dependency> | ||
| 139 | + | ||
| 140 | + <dependency> | ||
| 135 | <groupId>log4j</groupId> | 141 | <groupId>log4j</groupId> |
| 136 | <artifactId>log4j</artifactId> | 142 | <artifactId>log4j</artifactId> |
| 137 | <version>1.2.17</version> | 143 | <version>1.2.17</version> |
src/main/java/com/sunyo/wlpt/message/bus/service/controller/view/ViewExchangeController.java
0 → 100644
| 1 | +package com.sunyo.wlpt.message.bus.service.controller.view; | ||
| 2 | + | ||
| 3 | +import com.sunyo.wlpt.message.bus.service.response.ResultJson; | ||
| 4 | +import com.sunyo.wlpt.message.bus.service.service.view.ExchangeFactory; | ||
| 5 | +import org.springframework.web.bind.annotation.*; | ||
| 6 | + | ||
| 7 | +import javax.annotation.Resource; | ||
| 8 | +import java.io.IOException; | ||
| 9 | +import java.net.URISyntaxException; | ||
| 10 | + | ||
| 11 | +/** | ||
| 12 | + * @author 子诚 | ||
| 13 | + * Description: | ||
| 14 | + * 时间:2020/8/27 15:23 | ||
| 15 | + */ | ||
| 16 | +@CrossOrigin | ||
| 17 | +@RequestMapping("bus/view/exchange") | ||
| 18 | +@RestController | ||
| 19 | +public class ViewExchangeController { | ||
| 20 | + | ||
| 21 | + @Resource | ||
| 22 | + private ExchangeFactory exchangeFactory; | ||
| 23 | + | ||
| 24 | + @GetMapping("/list") | ||
| 25 | + public ResultJson getViewExchangeList( | ||
| 26 | + @RequestParam(value = "serverName", required = false) String serverName, | ||
| 27 | + @RequestParam(value = "virtualHostName", required = false) String virtualHostName, | ||
| 28 | + @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum, | ||
| 29 | + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize | ||
| 30 | + ) | ||
| 31 | + { | ||
| 32 | + try { | ||
| 33 | + return exchangeFactory.getViewExchangeList(serverName, virtualHostName, pageNum, pageSize); | ||
| 34 | + } catch (IOException | URISyntaxException e) { | ||
| 35 | + return new ResultJson<>("500", "服务器异常,查询交换机监控,失败!请联系管理员"); | ||
| 36 | + } | ||
| 37 | + } | ||
| 38 | +} |
| 1 | +package com.sunyo.wlpt.message.bus.service.domain.view; | ||
| 2 | + | ||
| 3 | +import com.fasterxml.jackson.annotation.JsonProperty; | ||
| 4 | +import com.rabbitmq.http.client.domain.ExchangeInfo; | ||
| 5 | +import com.rabbitmq.http.client.domain.ExchangeMessageStats; | ||
| 6 | +import lombok.AllArgsConstructor; | ||
| 7 | +import lombok.Builder; | ||
| 8 | +import lombok.Data; | ||
| 9 | +import lombok.NoArgsConstructor; | ||
| 10 | + | ||
| 11 | +/** | ||
| 12 | + * @author 子诚 | ||
| 13 | + * Description: | ||
| 14 | + * 时间:2020/8/31 14:38 | ||
| 15 | + */ | ||
| 16 | +@Data | ||
| 17 | +@Builder | ||
| 18 | +@AllArgsConstructor | ||
| 19 | +@NoArgsConstructor | ||
| 20 | +public class TempExchangeInfo extends ExchangeInfo { | ||
| 21 | + @JsonProperty("message_stats") | ||
| 22 | + private ExchangeMessageStats messageStats; | ||
| 23 | +} |
| 1 | package com.sunyo.wlpt.message.bus.service.domain.view; | 1 | package com.sunyo.wlpt.message.bus.service.domain.view; |
| 2 | 2 | ||
| 3 | -import com.rabbitmq.http.client.domain.ExchangeInfo; | 3 | +import com.rabbitmq.http.client.domain.ExchangeMessageStats; |
| 4 | import lombok.AllArgsConstructor; | 4 | import lombok.AllArgsConstructor; |
| 5 | import lombok.Builder; | 5 | import lombok.Builder; |
| 6 | import lombok.Data; | 6 | import lombok.Data; |
| @@ -20,5 +20,15 @@ import java.io.Serializable; | @@ -20,5 +20,15 @@ import java.io.Serializable; | ||
| 20 | public class ViewExchangeInfo implements Serializable { | 20 | public class ViewExchangeInfo implements Serializable { |
| 21 | private static final long serialVersionUID = -3353890396017709770L; | 21 | private static final long serialVersionUID = -3353890396017709770L; |
| 22 | private String serverName; | 22 | private String serverName; |
| 23 | - private ExchangeInfo exchangeInfo; | 23 | + private TempExchangeInfo tempExchangeInfo; |
| 24 | + | ||
| 25 | + public long getPublishIn() | ||
| 26 | + { | ||
| 27 | + TempExchangeInfo tempExchangeInfo = getTempExchangeInfo(); | ||
| 28 | + ExchangeMessageStats messageStats = tempExchangeInfo.getMessageStats(); | ||
| 29 | + if (messageStats == null) { | ||
| 30 | + return 0; | ||
| 31 | + } | ||
| 32 | + return messageStats.getPublishIn(); | ||
| 33 | + } | ||
| 24 | } | 34 | } |
| @@ -2,14 +2,18 @@ package com.sunyo.wlpt.message.bus.service.rabbit.utils; | @@ -2,14 +2,18 @@ package com.sunyo.wlpt.message.bus.service.rabbit.utils; | ||
| 2 | 2 | ||
| 3 | import com.rabbitmq.http.client.Client; | 3 | import com.rabbitmq.http.client.Client; |
| 4 | import com.rabbitmq.http.client.domain.ExchangeInfo; | 4 | import com.rabbitmq.http.client.domain.ExchangeInfo; |
| 5 | +import com.rabbitmq.http.client.domain.ExchangeMessageStats; | ||
| 5 | import com.rabbitmq.http.client.domain.QueueInfo; | 6 | import com.rabbitmq.http.client.domain.QueueInfo; |
| 6 | import com.rabbitmq.http.client.domain.UserPermissions; | 7 | import com.rabbitmq.http.client.domain.UserPermissions; |
| 7 | import com.sunyo.wlpt.message.bus.service.domain.BusServer; | 8 | import com.sunyo.wlpt.message.bus.service.domain.BusServer; |
| 8 | import com.sunyo.wlpt.message.bus.service.domain.UserInfo; | 9 | import com.sunyo.wlpt.message.bus.service.domain.UserInfo; |
| 9 | import com.sunyo.wlpt.message.bus.service.domain.VirtualHost; | 10 | import com.sunyo.wlpt.message.bus.service.domain.VirtualHost; |
| 11 | +import com.sunyo.wlpt.message.bus.service.domain.view.TempExchangeInfo; | ||
| 10 | import com.sunyo.wlpt.message.bus.service.domain.view.ViewExchangeInfo; | 12 | import com.sunyo.wlpt.message.bus.service.domain.view.ViewExchangeInfo; |
| 11 | import com.sunyo.wlpt.message.bus.service.domain.view.ViewQueueInfo; | 13 | import com.sunyo.wlpt.message.bus.service.domain.view.ViewQueueInfo; |
| 12 | import com.sunyo.wlpt.message.bus.service.utils.AESUtils; | 14 | import com.sunyo.wlpt.message.bus.service.utils.AESUtils; |
| 15 | +import org.apache.ibatis.reflection.MetaObject; | ||
| 16 | +import org.apache.ibatis.reflection.SystemMetaObject; | ||
| 13 | 17 | ||
| 14 | import java.io.IOException; | 18 | import java.io.IOException; |
| 15 | import java.net.URISyntaxException; | 19 | import java.net.URISyntaxException; |
| @@ -242,13 +246,50 @@ public class ClientUtils { | @@ -242,13 +246,50 @@ public class ClientUtils { | ||
| 242 | List<ViewExchangeInfo> list = new ArrayList<>(); | 246 | List<ViewExchangeInfo> list = new ArrayList<>(); |
| 243 | // 将获取到的队列信息,拼接一个属性,服务器名称 | 247 | // 将获取到的队列信息,拼接一个属性,服务器名称 |
| 244 | for (ExchangeInfo exchangeInfo : exchanges) { | 248 | for (ExchangeInfo exchangeInfo : exchanges) { |
| 245 | - ViewExchangeInfo viewExchangeInfo = ViewExchangeInfo.builder().serverName(serverName).exchangeInfo(exchangeInfo).build(); | 249 | + TempExchangeInfo tempExchangeInfo = exchangeInfoToTemp(exchangeInfo); |
| 250 | + ViewExchangeInfo viewExchangeInfo = ViewExchangeInfo.builder().serverName(serverName).tempExchangeInfo(tempExchangeInfo).build(); | ||
| 246 | list.add(viewExchangeInfo); | 251 | list.add(viewExchangeInfo); |
| 247 | } | 252 | } |
| 248 | return list; | 253 | return list; |
| 249 | } | 254 | } |
| 250 | 255 | ||
| 251 | /** | 256 | /** |
| 257 | + * mybatis封装的反射(根据属性名和对象,获取属性的值) | ||
| 258 | + * | ||
| 259 | + * @param fieldName 属性名 | ||
| 260 | + * @param object 对象 | ||
| 261 | + * @return | ||
| 262 | + */ | ||
| 263 | + private static Object getFieldValueByFieldName(String fieldName, Object object) | ||
| 264 | + { | ||
| 265 | + MetaObject metaObject = SystemMetaObject.forObject(object); | ||
| 266 | + Object value = metaObject.getValue(fieldName); | ||
| 267 | + return value; | ||
| 268 | + } | ||
| 269 | + | ||
| 270 | + /** | ||
| 271 | + * 将ExchangeInfo转换成TempExchangeInfo | ||
| 272 | + * | ||
| 273 | + * @param exchangeInfo ExchangeInfo | ||
| 274 | + * @return | ||
| 275 | + */ | ||
| 276 | + private static TempExchangeInfo exchangeInfoToTemp(ExchangeInfo exchangeInfo) | ||
| 277 | + { | ||
| 278 | + ExchangeMessageStats messageStats = (ExchangeMessageStats) getFieldValueByFieldName("messageStats", exchangeInfo); | ||
| 279 | + TempExchangeInfo temp = new TempExchangeInfo(); | ||
| 280 | + temp.setVhost(exchangeInfo.getVhost()); | ||
| 281 | + temp.setName(exchangeInfo.getName()); | ||
| 282 | + temp.setType(exchangeInfo.getType()); | ||
| 283 | + temp.setDurable(exchangeInfo.isDurable()); | ||
| 284 | + temp.setAutoDelete(exchangeInfo.isAutoDelete()); | ||
| 285 | + temp.setInternal(exchangeInfo.isInternal()); | ||
| 286 | + temp.setArguments(exchangeInfo.getArguments()); | ||
| 287 | + temp.setMessageStats(messageStats); | ||
| 288 | + return temp; | ||
| 289 | + } | ||
| 290 | + | ||
| 291 | + | ||
| 292 | + /** | ||
| 252 | * 获取MQ界面的交换机信息,重载 | 293 | * 获取MQ界面的交换机信息,重载 |
| 253 | * | 294 | * |
| 254 | * @param busServer MQ服务器信息 | 295 | * @param busServer MQ服务器信息 |
| @@ -279,7 +320,8 @@ public class ClientUtils { | @@ -279,7 +320,8 @@ public class ClientUtils { | ||
| 279 | { | 320 | { |
| 280 | Client client = connectClient(busServer); | 321 | Client client = connectClient(busServer); |
| 281 | ExchangeInfo exchangeInfo = client.getExchange(vHostName, exchangeName); | 322 | ExchangeInfo exchangeInfo = client.getExchange(vHostName, exchangeName); |
| 282 | - ViewExchangeInfo viewExchangeInfo = ViewExchangeInfo.builder().serverName(busServer.getServerName()).exchangeInfo(exchangeInfo).build(); | 323 | + TempExchangeInfo tempExchangeInfo = exchangeInfoToTemp(exchangeInfo); |
| 324 | + ViewExchangeInfo viewExchangeInfo = ViewExchangeInfo.builder().serverName(busServer.getServerName()).tempExchangeInfo(tempExchangeInfo).build(); | ||
| 283 | return viewExchangeInfo; | 325 | return viewExchangeInfo; |
| 284 | } | 326 | } |
| 285 | 327 |
| 1 | +package com.sunyo.wlpt.message.bus.service.service.view; | ||
| 2 | + | ||
| 3 | +import com.sunyo.wlpt.message.bus.service.domain.BusServer; | ||
| 4 | +import com.sunyo.wlpt.message.bus.service.domain.VirtualHost; | ||
| 5 | +import com.sunyo.wlpt.message.bus.service.domain.view.ViewExchangeInfo; | ||
| 6 | +import com.sunyo.wlpt.message.bus.service.mapper.BusServerMapper; | ||
| 7 | +import com.sunyo.wlpt.message.bus.service.mapper.VirtualHostMapper; | ||
| 8 | +import com.sunyo.wlpt.message.bus.service.rabbit.utils.ClientUtils; | ||
| 9 | +import com.sunyo.wlpt.message.bus.service.response.ResultJson; | ||
| 10 | +import io.netty.util.internal.StringUtil; | ||
| 11 | +import org.springframework.stereotype.Service; | ||
| 12 | + | ||
| 13 | +import javax.annotation.Resource; | ||
| 14 | +import java.io.IOException; | ||
| 15 | +import java.net.URISyntaxException; | ||
| 16 | +import java.util.ArrayList; | ||
| 17 | +import java.util.Comparator; | ||
| 18 | +import java.util.List; | ||
| 19 | +import java.util.stream.Collectors; | ||
| 20 | + | ||
| 21 | +/** | ||
| 22 | + * @author 子诚 | ||
| 23 | + * Description: | ||
| 24 | + * 时间:2020/8/27 17:08 | ||
| 25 | + */ | ||
| 26 | +@Service | ||
| 27 | +public class ExchangeFactory { | ||
| 28 | + | ||
| 29 | + @Resource | ||
| 30 | + private BusServerMapper busServerMapper; | ||
| 31 | + | ||
| 32 | + @Resource | ||
| 33 | + private VirtualHostMapper virtualHostMapper; | ||
| 34 | + | ||
| 35 | + public ResultJson getViewExchangeList(String serverName, String virtualHostName, Integer pageNum, Integer pageSize) throws IOException, URISyntaxException | ||
| 36 | + { | ||
| 37 | + List<ViewExchangeInfo> list = new ArrayList<>(); | ||
| 38 | + | ||
| 39 | + // 服务器名称、虚拟主机名称,均为空 | ||
| 40 | + if (StringUtil.isNullOrEmpty(serverName) && StringUtil.isNullOrEmpty(virtualHostName)) { | ||
| 41 | + List<BusServer> serverList = busServerMapper.getServerList(); | ||
| 42 | + for (BusServer busServer : serverList) { | ||
| 43 | + List<ViewExchangeInfo> viewExchanges = ClientUtils.getViewExchanges(busServer); | ||
| 44 | + list.addAll(viewExchanges); | ||
| 45 | + } | ||
| 46 | + } | ||
| 47 | + | ||
| 48 | + // 仅,服务器名称不为空 | ||
| 49 | + if (!StringUtil.isNullOrEmpty(serverName) && StringUtil.isNullOrEmpty(virtualHostName)) { | ||
| 50 | + BusServer busServer = busServerMapper.selectByServerName(serverName); | ||
| 51 | + if (busServer == null) { | ||
| 52 | + return new ResultJson("400", "该服务器名称不存在,请仔细检查"); | ||
| 53 | + } | ||
| 54 | + List<ViewExchangeInfo> viewExchanges = ClientUtils.getViewExchanges(busServer); | ||
| 55 | + list.addAll(viewExchanges); | ||
| 56 | + } | ||
| 57 | + | ||
| 58 | + // 仅,虚拟主机名称不为空 | ||
| 59 | + if (StringUtil.isNullOrEmpty(serverName) && !StringUtil.isNullOrEmpty(virtualHostName)) { | ||
| 60 | + VirtualHost virtualHost = virtualHostMapper.selectByVirtualHostName(virtualHostName); | ||
| 61 | + if (virtualHost == null) { | ||
| 62 | + return new ResultJson("400", "该虚拟主机名称不存在,请仔细检查"); | ||
| 63 | + } | ||
| 64 | + BusServer busServer = busServerMapper.selectByPrimaryKey(virtualHost.getServerId()); | ||
| 65 | + List<ViewExchangeInfo> viewExchanges = ClientUtils.getViewExchanges(busServer, virtualHostName); | ||
| 66 | + list.addAll(viewExchanges); | ||
| 67 | + } | ||
| 68 | + | ||
| 69 | + // 服务器名称、虚拟主机名称,均不为空 | ||
| 70 | + if (!StringUtil.isNullOrEmpty(serverName) && !StringUtil.isNullOrEmpty(virtualHostName)) { | ||
| 71 | + BusServer busServer = busServerMapper.selectByServerName(serverName); | ||
| 72 | + if (busServer == null) { | ||
| 73 | + return new ResultJson("400", "该服务器名称不存在,请仔细检查"); | ||
| 74 | + } | ||
| 75 | + VirtualHost virtualHost = virtualHostMapper.selectByVirtualHostName(virtualHostName); | ||
| 76 | + if (virtualHost == null) { | ||
| 77 | + return new ResultJson("400", "该虚拟主机名称不存在,请仔细检查"); | ||
| 78 | + } | ||
| 79 | + if (!virtualHost.getServerId().equals(busServer.getId())) { | ||
| 80 | + return new ResultJson("400", "该虚拟主机不属于该服务器,请仔细检查"); | ||
| 81 | + } | ||
| 82 | + List<ViewExchangeInfo> viewExchanges = ClientUtils.getViewExchanges(busServer, virtualHostName); | ||
| 83 | + list.addAll(viewExchanges); | ||
| 84 | + } | ||
| 85 | + | ||
| 86 | + Integer total = list.size(); | ||
| 87 | + List<ViewExchangeInfo> resultList = subAndSortList(pageNum, pageSize, list); | ||
| 88 | + return resultList.size() > 0 | ||
| 89 | + ? new ResultJson<>("200", "查询交换机监控,成功!", resultList, total) | ||
| 90 | + : new ResultJson<>("500", "查询交换机监控,失败!"); | ||
| 91 | + } | ||
| 92 | + | ||
| 93 | + /** | ||
| 94 | + * 实现排序与分页效果 | ||
| 95 | + * | ||
| 96 | + * @param pageNum 当前的页数 | ||
| 97 | + * @param pageSize 每页的大小 | ||
| 98 | + * @param list List<ViewExchangeInfo> | ||
| 99 | + * @return | ||
| 100 | + */ | ||
| 101 | + private List<ViewExchangeInfo> subAndSortList(Integer pageNum, Integer pageSize, List<ViewExchangeInfo> list) | ||
| 102 | + { | ||
| 103 | + Integer start = (pageNum - 1) * pageSize; | ||
| 104 | + Integer end = start + pageSize; | ||
| 105 | + Integer total = list.size(); | ||
| 106 | + if (start > total) { | ||
| 107 | + start = 0; | ||
| 108 | + end = total; | ||
| 109 | + } | ||
| 110 | + if (end > total) { | ||
| 111 | + end = total; | ||
| 112 | + } | ||
| 113 | + List<ViewExchangeInfo> sortedList = | ||
| 114 | + list.stream().sorted(Comparator.comparing(ViewExchangeInfo::getPublishIn).reversed()) | ||
| 115 | + .collect(Collectors.toList()); | ||
| 116 | + List<ViewExchangeInfo> pageList = sortedList.subList(start, end); | ||
| 117 | + return pageList; | ||
| 118 | + } | ||
| 119 | +} |
| @@ -92,7 +92,7 @@ public class ViewQueueFactory { | @@ -92,7 +92,7 @@ public class ViewQueueFactory { | ||
| 92 | } | 92 | } |
| 93 | 93 | ||
| 94 | /** | 94 | /** |
| 95 | - * 实现分页与排序效果 | 95 | + * 实现排序与分页效果 |
| 96 | * | 96 | * |
| 97 | * @param pageNum 开始页 | 97 | * @param pageNum 开始页 |
| 98 | * @param pageSize 每页大小 | 98 | * @param pageSize 每页大小 |
| @@ -111,11 +111,13 @@ public class ViewQueueFactory { | @@ -111,11 +111,13 @@ public class ViewQueueFactory { | ||
| 111 | if (end > total) { | 111 | if (end > total) { |
| 112 | end = total; | 112 | end = total; |
| 113 | } | 113 | } |
| 114 | - List<ViewQueueInfo> pageList = list.subList(start, end); | 114 | + |
| 115 | // 对积压数,进行降序排序 | 115 | // 对积压数,进行降序排序 |
| 116 | - List<ViewQueueInfo> resultList = | ||
| 117 | - pageList.stream().sorted(Comparator.comparing(ViewQueueInfo::getMessageReady).reversed()) | 116 | + List<ViewQueueInfo> sortedList = |
| 117 | + list.stream().sorted(Comparator.comparing(ViewQueueInfo::getMessageReady).reversed()) | ||
| 118 | .collect(Collectors.toList()); | 118 | .collect(Collectors.toList()); |
| 119 | + // 分页 | ||
| 120 | + List<ViewQueueInfo> resultList = sortedList.subList(start, end); | ||
| 119 | return resultList; | 121 | return resultList; |
| 120 | } | 122 | } |
| 121 | } | 123 | } |
-
请 注册 或 登录 后发表评论