正在显示
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 | } |
-
请 注册 或 登录 后发表评论