diff --git a/pom.xml b/pom.xml
index c66e164..d19b5e3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -83,6 +83,12 @@
3.12.0
+
+ commons-collections
+ commons-collections
+ 3.2.2
+
+
com.google.guava
guava
diff --git a/src/main/java/com/xuxd/kafka/console/beans/dto/QueryConsumerGroupDTO.java b/src/main/java/com/xuxd/kafka/console/beans/dto/QueryConsumerGroupDTO.java
new file mode 100644
index 0000000..2d4180f
--- /dev/null
+++ b/src/main/java/com/xuxd/kafka/console/beans/dto/QueryConsumerGroupDTO.java
@@ -0,0 +1,18 @@
+package com.xuxd.kafka.console.beans.dto;
+
+import java.util.List;
+import lombok.Data;
+
+/**
+ * kafka-console-ui.
+ *
+ * @author xuxd
+ * @date 2021-09-11 11:26:47
+ **/
+@Data
+public class QueryConsumerGroupDTO {
+
+ private String groupId;
+
+ private List State;
+}
diff --git a/src/main/java/com/xuxd/kafka/console/controller/ConsumerController.java b/src/main/java/com/xuxd/kafka/console/controller/ConsumerController.java
new file mode 100644
index 0000000..1103c3f
--- /dev/null
+++ b/src/main/java/com/xuxd/kafka/console/controller/ConsumerController.java
@@ -0,0 +1,45 @@
+package com.xuxd.kafka.console.controller;
+
+import com.xuxd.kafka.console.beans.dto.QueryConsumerGroupDTO;
+import com.xuxd.kafka.console.service.ConsumerService;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Objects;
+import java.util.Set;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.kafka.common.ConsumerGroupState;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * kafka-console-ui.
+ *
+ * @author xuxd
+ * @date 2021-09-11 11:16:09
+ **/
+@RestController
+@RequestMapping("/consumer")
+public class ConsumerController {
+
+ @Autowired
+ private ConsumerService consumerService;
+
+ @GetMapping("/group/list")
+ public Object getGroupList(@RequestBody(required = false) QueryConsumerGroupDTO dto) {
+ if (Objects.isNull(dto)) {
+ return consumerService.getConsumerGroupList(null, null);
+ }
+ List groupIdList = StringUtils.isNotBlank(dto.getGroupId()) ? Collections.singletonList(dto.getGroupId()) : Collections.emptyList();
+
+ Set stateSet = new HashSet<>();
+ if (CollectionUtils.isNotEmpty(dto.getState())) {
+ dto.getState().stream().forEach(s -> stateSet.add(ConsumerGroupState.valueOf(s)));
+ }
+ return consumerService.getConsumerGroupList(groupIdList, stateSet);
+ }
+}
diff --git a/ui/src/utils/api.js b/ui/src/utils/api.js
index a356f86..ad0f25f 100644
--- a/ui/src/utils/api.js
+++ b/ui/src/utils/api.js
@@ -66,3 +66,10 @@ export const KafkaTopicApi = {
method: "delete",
},
};
+
+export const KafkaConsumerApi = {
+ getConsumerGroupList: {
+ url: "/consumer/group/list",
+ method: "get",
+ },
+};
diff --git a/ui/src/views/group/Group.vue b/ui/src/views/group/Group.vue
index aa5366b..14233d9 100644
--- a/ui/src/views/group/Group.vue
+++ b/ui/src/views/group/Group.vue
@@ -1,17 +1,227 @@
-
-
+
+
+
+
+
+
+
+
+ {{ text }}
+
+
+
+
+
+
-
+