[ISSUE #49] RocketMQ and Nacos health check (#53)

* style: `sql` `entities` `mapper` improvement

* refactor: move health module into function module.
more files will be added in function module

* feat: add rocketmq check and nacos check

* fix: ci utf8

* fix: pom

* feat: add StoreType Enum
diff --git a/eventmesh-dashboard-console/pom.xml b/eventmesh-dashboard-console/pom.xml
index b071854..1fe1905 100644
--- a/eventmesh-dashboard-console/pom.xml
+++ b/eventmesh-dashboard-console/pom.xml
@@ -65,28 +65,46 @@
             <scope>runtime</scope>
         </dependency>
 
+        <!-- Meta - nacos client -->
+        <dependency>
+            <groupId>com.alibaba.nacos</groupId>
+            <artifactId>nacos-client</artifactId>
+            <version>${nacos.version}</version>
+        </dependency>
+
         <!-- health check client -->
         <!-- EventMesh SDK -->
-        <dependency>
-            <groupId>org.apache.eventmesh</groupId>
-            <artifactId>eventmesh-sdk-java</artifactId>
-            <version>1.10.0-release</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>junit</groupId>
-                    <artifactId>junit</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>junit</groupId>
-                    <artifactId>junit-dep</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>org.apache.eventmesh</groupId>-->
+<!--            <artifactId>eventmesh-sdk-java</artifactId>-->
+<!--            <version>1.10.0-release</version>-->
+<!--            <exclusions>-->
+<!--                <exclusion>-->
+<!--                    <groupId>junit</groupId>-->
+<!--                    <artifactId>junit</artifactId>-->
+<!--                </exclusion>-->
+<!--                <exclusion>-->
+<!--                    <groupId>junit</groupId>-->
+<!--                    <artifactId>junit-dep</artifactId>-->
+<!--                </exclusion>-->
+<!--            </exclusions>-->
+<!--        </dependency>-->
         <!-- storage redis client -->
         <dependency>
             <groupId>io.lettuce</groupId>
             <artifactId>lettuce-core</artifactId>
         </dependency>
+        <!-- rocketmq client -->
+        <dependency>
+            <groupId>org.apache.rocketmq</groupId>
+            <artifactId>rocketmq-client</artifactId>
+            <version>4.9.4</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.rocketmq</groupId>
+            <artifactId>rocketmq-tools</artifactId>
+            <version>5.2.0</version>
+        </dependency>
         <!-- health check client end -->
 
         <!-- Unit Test -->
@@ -105,4 +123,19 @@
         </dependency>
     </dependencies>
 
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>3.2.2</version>
+                <configuration>
+                    <excludes>
+                        <exclude>**/org/apache/eventmesh/dashboard/console/integration/**/*.java</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
 </project>
\ No newline at end of file
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/config/HealthCheckConfig.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/config/HealthCheckConfig.java
index 8588311..bbf0571 100644
--- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/config/HealthCheckConfig.java
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/config/HealthCheckConfig.java
@@ -17,7 +17,7 @@
 
 package org.apache.eventmesh.dashboard.console.config;
 
-import org.apache.eventmesh.dashboard.console.health.check.config.HealthCheckObjectConfig;
+import org.apache.eventmesh.dashboard.console.function.health.check.config.HealthCheckObjectConfig;
 
 import java.util.List;
 
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/constant/health/HealthCheckTypeConstant.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/constant/health/HealthCheckTypeConstant.java
new file mode 100644
index 0000000..6765bab
--- /dev/null
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/constant/health/HealthCheckTypeConstant.java
@@ -0,0 +1,39 @@
+/*
+ * 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.eventmesh.dashboard.console.constant.health;
+
+public class HealthCheckTypeConstant {
+
+    public static final String HEALTH_CHECK_TYPE_UNKNOWN = "unknown";
+
+    public static final String HEALTH_CHECK_TYPE_CLUSTER = "cluster";
+
+    public static final String HEALTH_CHECK_TYPE_RUNTIME = "runtime";
+    public static final String HEALTH_CHECK_TYPE_STORAGE = "storage";
+    public static final String HEALTH_CHECK_TYPE_META = "meta";
+    public static final String HEALTH_CHECK_TYPE_TOPIC = "topic";
+
+    public static final String HEALTH_CHECK_SUBTYPE_REDIS = "redis";
+    public static final String HEALTH_CHECK_SUBTYPE_MYSQL = "mysql";
+    public static final String HEALTH_CHECK_SUBTYPE_ROCKETMQ_BROKER = "rocketmq4-broker";
+    public static final String HEALTH_CHECK_SUBTYPE_ROCKETMQ_NAMESERVER = "rocketmq4-nameserver";
+    public static final String HEALTH_CHECK_SUBTYPE_ROCKETMQ_TOPIC = "rocketmq4-topic";
+
+    public static final String HEALTH_CHECK_SUBTYPE_NACOS_CONFIG = "nacos-config";
+    public static final String HEALTH_CHECK_SUBTYPE_NACOS_REGISTER = "nacos-register";
+}
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/constant/health/HealthConstant.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/constant/health/HealthConstant.java
new file mode 100644
index 0000000..e243b30
--- /dev/null
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/constant/health/HealthConstant.java
@@ -0,0 +1,61 @@
+/*
+ * 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.eventmesh.dashboard.console.constant.health;
+
+public class HealthConstant {
+    public static final String NEW_LINE_ENDING = "\n";
+
+    public static final String RUNTIME_CHECK_TOPIC = "eventmesh-dashboard-healthcheck-topic";
+
+    public static final String RUNTIME_CHECK_CONTENT_KEY = "eventmesh-dashboard-healthcheck-content";
+
+    public static final String RUNTIME_CHECK_CONTENT_BODY = "eventmesh-dashboard-healthcheck-content-body";
+
+    public static final String CLOUDEVENT_CONTENT_TYPE = "application/cloudevents+json";
+
+
+    public static final String ENV = "test";
+    public static final String HOST = "localhost";
+    public static final String PASSWORD = "PASSWORD";
+    public static final String USER_NAME = "PU4283";
+    public static final String GROUP = "EventmeshTestGroup";
+    public static final String PATH = "/data/app/umg_proxy";
+    public static final Integer PORT = 8362;
+    public static final String VERSION = "2.0.11";
+    public static final String IDC = "FT";
+    public static final String SUBSYSTEM = "5023";
+
+    public static final String ROCKETMQ_CHECK_PRODUCER_GROUP = "eventmesh-dashboard-healthcheck-rocketmq-producer-group";
+
+    public static final String ROCKETMQ_CHECK_CONSUMER_GROUP = "eventmesh-dashboard-healthcheck-rocketmq-consumer-group";
+
+    public static final String ROCKETMQ_CHECK_TOPIC = "DO-NOT-USE-THIS-TOPIC-"
+        + "eventmesh-dashboard-healthcheck-rocketmq-topic-90a78a5d-b803-447e-8c48-1c87ab0c74d9";
+    public static final String ROCKETMQ_CHECK_TOPIC_MSG = "eventmesh-dashboard-healthcheck-rocketmq-message";
+
+    public static final String NACOS_CHECK_DATA_ID = "DO-NOT-USE-THIS-"
+        + "eventmesh-dashboard-healthcheck-nacos-data-id-28e2933f-a47b-439d-b14b-7d9970c37042";
+
+    public static final String NACOS_CHECK_GROUP = "EVENTMESH_DASHBOARD_HEALTH_CHECK_GROUP";
+
+    public static final String NACOS_CHECK_CONTENT = "eventmesh-dashboard";
+
+    public static final String NACOS_CHECK_SERVICE_NAME = "eventmesh-dashboard-healthcheck-nacos-service-name";
+
+    public static final String NACOS_CHECK_SERVICE_CLUSTER_NAME = "eventmesh-dashboard-healthcheck-nacos-service-cluster-name";
+}
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/base/BaseEntity.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/base/BaseEntity.java
index 14192fa..5d0984d 100644
--- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/base/BaseEntity.java
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/base/BaseEntity.java
@@ -24,13 +24,21 @@
 
 import lombok.Data;
 
+/**
+ * Base Entity provide some basic fields that every Eventmesh Dashboard Entity would have
+ */
 @Data
 @Schema(name = "BaseEntity", description = "Base entity")
 public class BaseEntity implements Serializable {
 
     private static final long serialVersionUID = -2697805837923579585L;
+    /**
+     * Primary key
+     */
+    @Schema(name = "id", description = "primary key")
+    protected Long id;
 
-    private Long clusterId;
+    protected Long clusterId;
 
     protected Timestamp createTime;
 
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/connection/ConnectionEntity.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/connection/ConnectionEntity.java
index 0a451cf..626e793 100644
--- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/connection/ConnectionEntity.java
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/connection/ConnectionEntity.java
@@ -41,12 +41,6 @@
     private static final long serialVersionUID = 6565578252656944905L;
 
     /**
-     * Primary key
-     */
-    @Schema(name = "id", description = "primary key")
-    private Long id;
-
-    /**
      * Runtime cluster id
      */
     @Schema(name = "clusterId", description = "runtime cluster id")
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/connector/ConnectorEntity.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/connector/ConnectorEntity.java
index 1681ac2..66db0f9 100644
--- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/connector/ConnectorEntity.java
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/connector/ConnectorEntity.java
@@ -34,9 +34,6 @@
 
     private static final long serialVersionUID = -8226303660232951326L;
 
-    @Schema(name = "id", description = "primary key")
-    private Long id;
-
     private Long clusterId;
 
     private String name;
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/health/HealthCheckResultEntity.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/health/HealthCheckResultEntity.java
index e8578eb..f427b66 100644
--- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/health/HealthCheckResultEntity.java
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/health/HealthCheckResultEntity.java
@@ -32,8 +32,6 @@
 public class HealthCheckResultEntity extends BaseEntity {
 
     private static final long serialVersionUID = -7350585209577598040L;
-    @Schema(name = "id", description = "primary key")
-    private Long id;
 
     private Long clusterId;
 
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/meta/MetaEntity.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/meta/MetaEntity.java
index 2c32e28..a6871eb 100644
--- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/meta/MetaEntity.java
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/meta/MetaEntity.java
@@ -33,12 +33,6 @@
 
     private static final long serialVersionUID = 7176263169716424469L;
 
-    /**
-     * Primary key
-     */
-    @Schema(name = "id", description = "Primary key")
-    private Long id;
-
     private String name;
 
     private String type;
@@ -59,6 +53,7 @@
 
     /**
      * 0: not active, 1: active
+     *
      * @see StatusEnum
      */
     @Schema(name = "status", defaultValue = "0", allowableValues = {"0", "1"}, description = "0:inactive, 1:active")
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/constant/HealthConstant.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/enums/StoreType.java
similarity index 83%
rename from eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/constant/HealthConstant.java
rename to eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/enums/StoreType.java
index 979f578..b4721cc 100644
--- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/constant/HealthConstant.java
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/enums/StoreType.java
@@ -15,8 +15,14 @@
  * limitations under the License.
  */
 
-package org.apache.eventmesh.dashboard.console.constant;
+package org.apache.eventmesh.dashboard.console.enums;
 
-public class HealthConstant {
-    public static final String NEW_LINE_ENDING = "\n";
+public enum StoreType {
+    ROCKETMQ,
+    KAFKA,
+    STANDALONE,
+    PULSAR,
+    RABBITMQ,
+    REDIS,
+
 }
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/enums/health/HealthCheckType.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/enums/health/HealthCheckType.java
index 3ee990b..abd918f 100644
--- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/enums/health/HealthCheckType.java
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/enums/health/HealthCheckType.java
@@ -17,20 +17,26 @@
 
 package org.apache.eventmesh.dashboard.console.enums.health;
 
+import static org.apache.eventmesh.dashboard.console.constant.health.HealthCheckTypeConstant.HEALTH_CHECK_TYPE_CLUSTER;
+import static org.apache.eventmesh.dashboard.console.constant.health.HealthCheckTypeConstant.HEALTH_CHECK_TYPE_RUNTIME;
+import static org.apache.eventmesh.dashboard.console.constant.health.HealthCheckTypeConstant.HEALTH_CHECK_TYPE_STORAGE;
+import static org.apache.eventmesh.dashboard.console.constant.health.HealthCheckTypeConstant.HEALTH_CHECK_TYPE_TOPIC;
+import static org.apache.eventmesh.dashboard.console.constant.health.HealthCheckTypeConstant.HEALTH_CHECK_TYPE_UNKNOWN;
+
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 
 @AllArgsConstructor
 public enum HealthCheckType {
-    UNKNOWN(0, "unknown"),
+    UNKNOWN(0, HEALTH_CHECK_TYPE_UNKNOWN),
 
-    CLUSTER(1, "cluster"),
+    CLUSTER(1, HEALTH_CHECK_TYPE_CLUSTER),
 
-    RUNTIME(2, "runtime"),
+    RUNTIME(2, HEALTH_CHECK_TYPE_RUNTIME),
 
-    TOPIC(3, "topic"),
+    TOPIC(3, HEALTH_CHECK_TYPE_TOPIC),
 
-    STORAGE(4, "storage");
+    STORAGE(4, HEALTH_CHECK_TYPE_STORAGE);
 
     @Getter
     private final Integer number;
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/CheckResultCache.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/CheckResultCache.java
similarity index 92%
rename from eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/CheckResultCache.java
rename to eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/CheckResultCache.java
index 66dcd44..4da837f 100644
--- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/CheckResultCache.java
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/CheckResultCache.java
@@ -15,11 +15,11 @@
  * limitations under the License.
  */
 
-package org.apache.eventmesh.dashboard.console.health;
+package org.apache.eventmesh.dashboard.console.function.health;
 
-import org.apache.eventmesh.dashboard.console.constant.HealthConstant;
+import org.apache.eventmesh.dashboard.console.constant.health.HealthConstant;
 import org.apache.eventmesh.dashboard.console.enums.health.HealthCheckStatus;
-import org.apache.eventmesh.dashboard.console.health.check.config.HealthCheckObjectConfig;
+import org.apache.eventmesh.dashboard.console.function.health.check.config.HealthCheckObjectConfig;
 
 import java.time.LocalDateTime;
 import java.util.Collections;
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/HealthExecutor.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/HealthExecutor.java
similarity index 94%
rename from eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/HealthExecutor.java
rename to eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/HealthExecutor.java
index 49d76e2..fac6eb7 100644
--- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/HealthExecutor.java
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/HealthExecutor.java
@@ -15,14 +15,14 @@
  * limitations under the License.
  */
 
-package org.apache.eventmesh.dashboard.console.health;
+package org.apache.eventmesh.dashboard.console.function.health;
 
 import org.apache.eventmesh.dashboard.console.entity.health.HealthCheckResultEntity;
 import org.apache.eventmesh.dashboard.console.enums.health.HealthCheckStatus;
 import org.apache.eventmesh.dashboard.console.enums.health.HealthCheckType;
-import org.apache.eventmesh.dashboard.console.health.CheckResultCache.CheckResult;
-import org.apache.eventmesh.dashboard.console.health.callback.HealthCheckCallback;
-import org.apache.eventmesh.dashboard.console.health.check.AbstractHealthCheckService;
+import org.apache.eventmesh.dashboard.console.function.health.CheckResultCache.CheckResult;
+import org.apache.eventmesh.dashboard.console.function.health.callback.HealthCheckCallback;
+import org.apache.eventmesh.dashboard.console.function.health.check.AbstractHealthCheckService;
 import org.apache.eventmesh.dashboard.console.service.health.HealthDataService;
 
 import java.util.ArrayList;
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/HealthService.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/HealthService.java
similarity index 91%
rename from eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/HealthService.java
rename to eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/HealthService.java
index 333fa99..b07fd64 100644
--- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/HealthService.java
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/HealthService.java
@@ -15,13 +15,13 @@
  * limitations under the License.
  */
 
-package org.apache.eventmesh.dashboard.console.health;
+package org.apache.eventmesh.dashboard.console.function.health;
 
-import org.apache.eventmesh.dashboard.console.health.CheckResultCache.CheckResult;
-import org.apache.eventmesh.dashboard.console.health.annotation.HealthCheckType;
-import org.apache.eventmesh.dashboard.console.health.check.AbstractHealthCheckService;
-import org.apache.eventmesh.dashboard.console.health.check.config.HealthCheckObjectConfig;
-import org.apache.eventmesh.dashboard.console.health.check.impl.StorageRedisCheck;
+import org.apache.eventmesh.dashboard.console.function.health.CheckResultCache.CheckResult;
+import org.apache.eventmesh.dashboard.console.function.health.annotation.HealthCheckType;
+import org.apache.eventmesh.dashboard.console.function.health.check.AbstractHealthCheckService;
+import org.apache.eventmesh.dashboard.console.function.health.check.config.HealthCheckObjectConfig;
+import org.apache.eventmesh.dashboard.console.function.health.check.impl.storage.RedisCheck;
 import org.apache.eventmesh.dashboard.console.service.health.HealthDataService;
 
 import java.lang.reflect.Constructor;
@@ -55,7 +55,7 @@
     private static final Map<String, Class<?>> HEALTH_CHECK_CLASS_CACHE = new HashMap<>();
 
     static {
-        setClassCache(StorageRedisCheck.class);
+        setClassCache(RedisCheck.class);
     }
 
     private static void setClassCache(Class<?> clazz) {
@@ -127,6 +127,7 @@
         if (Objects.isNull(subMap)) {
             return;
         }
+        subMap.get(resourceId).destroy();
         subMap.remove(resourceId);
         if (subMap.isEmpty()) {
             checkServiceMap.remove(resourceType);
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/annotation/HealthCheckType.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/annotation/HealthCheckType.java
similarity index 94%
rename from eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/annotation/HealthCheckType.java
rename to eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/annotation/HealthCheckType.java
index 6f39658..7a23b90 100644
--- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/annotation/HealthCheckType.java
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/annotation/HealthCheckType.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.eventmesh.dashboard.console.health.annotation;
+package org.apache.eventmesh.dashboard.console.function.health.annotation;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/callback/HealthCheckCallback.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/callback/HealthCheckCallback.java
similarity index 87%
rename from eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/callback/HealthCheckCallback.java
rename to eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/callback/HealthCheckCallback.java
index 7f7b360..541d30c 100644
--- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/callback/HealthCheckCallback.java
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/callback/HealthCheckCallback.java
@@ -15,9 +15,9 @@
  * limitations under the License.
  */
 
-package org.apache.eventmesh.dashboard.console.health.callback;
+package org.apache.eventmesh.dashboard.console.function.health.callback;
 
-import org.apache.eventmesh.dashboard.console.health.HealthExecutor;
+import org.apache.eventmesh.dashboard.console.function.health.HealthExecutor;
 
 /**
  * Callback used by HealthService.doCheck to notify the caller of the result of the health check.<br>
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/check/AbstractHealthCheckService.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/check/AbstractHealthCheckService.java
similarity index 87%
rename from eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/check/AbstractHealthCheckService.java
rename to eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/check/AbstractHealthCheckService.java
index 6fa7045..3a3ab99 100644
--- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/check/AbstractHealthCheckService.java
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/check/AbstractHealthCheckService.java
@@ -15,9 +15,9 @@
  * limitations under the License.
  */
 
-package org.apache.eventmesh.dashboard.console.health.check;
+package org.apache.eventmesh.dashboard.console.function.health.check;
 
-import org.apache.eventmesh.dashboard.console.health.check.config.HealthCheckObjectConfig;
+import org.apache.eventmesh.dashboard.console.function.health.check.config.HealthCheckObjectConfig;
 
 import lombok.Getter;
 
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/check/HealthCheckService.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/check/HealthCheckService.java
similarity index 83%
rename from eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/check/HealthCheckService.java
rename to eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/check/HealthCheckService.java
index 8f37363..1461d38 100644
--- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/check/HealthCheckService.java
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/check/HealthCheckService.java
@@ -15,10 +15,10 @@
  * limitations under the License.
  */
 
-package org.apache.eventmesh.dashboard.console.health.check;
+package org.apache.eventmesh.dashboard.console.function.health.check;
 
-import org.apache.eventmesh.dashboard.console.health.HealthExecutor;
-import org.apache.eventmesh.dashboard.console.health.callback.HealthCheckCallback;
+import org.apache.eventmesh.dashboard.console.function.health.HealthExecutor;
+import org.apache.eventmesh.dashboard.console.function.health.callback.HealthCheckCallback;
 
 /**
  * Health check service interface.<br>
@@ -36,4 +36,6 @@
 
     public void init();
 
+    public void destroy();
+
 }
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/check/config/HealthCheckObjectConfig.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/check/config/HealthCheckObjectConfig.java
similarity index 75%
rename from eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/check/config/HealthCheckObjectConfig.java
rename to eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/check/config/HealthCheckObjectConfig.java
index 8c350b4..79e8c82 100644
--- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/check/config/HealthCheckObjectConfig.java
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/check/config/HealthCheckObjectConfig.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.eventmesh.dashboard.console.health.check.config;
+package org.apache.eventmesh.dashboard.console.function.health.check.config;
 
 import java.util.Properties;
 
@@ -38,8 +38,11 @@
 
     private Long clusterId;
 
+    //Prioritize passing in this field for a url.
+    //redis, nacos
     private String connectUrl;
-    //mysql, redis
+
+    //redis
     private String host;
 
     private Integer port;
@@ -51,5 +54,15 @@
     //mysql, redis
     private String database;
 
-    private Long requestTimeoutMillis = Long.MAX_VALUE;
+    private Long requestTimeoutMillis = 100000L;
+
+    private RocketmqConfig rocketmqConfig = new RocketmqConfig();
+
+    @Data
+    public class RocketmqConfig {
+
+        private String nameServerUrl;
+        private String brokerUrl;
+        private String endPoint;
+    }
 }
\ No newline at end of file
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/check/impl/StorageRocketmqCheck.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/StorageRocketmqCheck.java
similarity index 91%
rename from eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/check/impl/StorageRocketmqCheck.java
rename to eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/StorageRocketmqCheck.java
index b6f56b8..c200f07 100644
--- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/check/impl/StorageRocketmqCheck.java
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/StorageRocketmqCheck.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.eventmesh.dashboard.console.health.check.impl;
+package org.apache.eventmesh.dashboard.console.function.health.check.impl;
 
 public class StorageRocketmqCheck {
 
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/meta/NacosConfigCheck.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/meta/NacosConfigCheck.java
new file mode 100644
index 0000000..db82e1f
--- /dev/null
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/meta/NacosConfigCheck.java
@@ -0,0 +1,102 @@
+/*
+ * 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.eventmesh.dashboard.console.function.health.check.impl.meta;
+
+import static org.apache.eventmesh.dashboard.console.constant.health.HealthCheckTypeConstant.HEALTH_CHECK_SUBTYPE_NACOS_CONFIG;
+import static org.apache.eventmesh.dashboard.console.constant.health.HealthCheckTypeConstant.HEALTH_CHECK_TYPE_META;
+import static org.apache.eventmesh.dashboard.console.constant.health.HealthConstant.NACOS_CHECK_CONTENT;
+import static org.apache.eventmesh.dashboard.console.constant.health.HealthConstant.NACOS_CHECK_DATA_ID;
+import static org.apache.eventmesh.dashboard.console.constant.health.HealthConstant.NACOS_CHECK_GROUP;
+
+import org.apache.eventmesh.dashboard.console.function.health.annotation.HealthCheckType;
+import org.apache.eventmesh.dashboard.console.function.health.callback.HealthCheckCallback;
+import org.apache.eventmesh.dashboard.console.function.health.check.AbstractHealthCheckService;
+import org.apache.eventmesh.dashboard.console.function.health.check.config.HealthCheckObjectConfig;
+
+import java.util.Properties;
+import java.util.concurrent.CompletableFuture;
+
+import com.alibaba.nacos.api.NacosFactory;
+import com.alibaba.nacos.api.config.ConfigService;
+import com.alibaba.nacos.api.exception.NacosException;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+@HealthCheckType(type = HEALTH_CHECK_TYPE_META, subType = HEALTH_CHECK_SUBTYPE_NACOS_CONFIG)
+public class NacosConfigCheck extends AbstractHealthCheckService {
+
+    private ConfigService configService;
+
+    public NacosConfigCheck(HealthCheckObjectConfig healthCheckObjectConfig) {
+        super(healthCheckObjectConfig);
+    }
+
+    @Override
+    public void doCheck(HealthCheckCallback callback) {
+        CompletableFuture.runAsync(() -> {
+            try {
+                String content = configService.getConfig(NACOS_CHECK_DATA_ID, NACOS_CHECK_GROUP, getConfig().getRequestTimeoutMillis());
+                if (NACOS_CHECK_CONTENT.equals(content)) {
+                    callback.onSuccess();
+                } else {
+                    callback.onFail(new RuntimeException("NacosCheck failed. Content is wrong."));
+                }
+            } catch (NacosException e) {
+                callback.onFail(e);
+            }
+        });
+    }
+
+    @Override
+    public void init() {
+        //create a config
+        try {
+            Properties properties = new Properties();
+            properties.put("serverAddr", getConfig().getConnectUrl());
+            ConfigService configService = NacosFactory.createConfigService(properties);
+            boolean isPublishOk = configService.publishConfig(NACOS_CHECK_DATA_ID, NACOS_CHECK_GROUP,
+                NACOS_CHECK_CONTENT);
+            if (!isPublishOk) {
+                log.error("NacosCheck init failed caused by crate config failed");
+            }
+        } catch (NacosException e) {
+            log.error("NacosCheck init failed caused by {}", e.getErrMsg());
+        }
+
+        try {
+            Properties properties = new Properties();
+            properties.put("serverAddr", getConfig().getConnectUrl());
+            configService = NacosFactory.createConfigService(properties);
+        } catch (NacosException e) {
+            log.error("NacosCheck init failed caused by {}", e.getErrMsg());
+        }
+    }
+
+    @Override
+    public void destroy() {
+        if (configService != null) {
+            try {
+                configService.removeConfig(NACOS_CHECK_DATA_ID, NACOS_CHECK_GROUP);
+            } catch (NacosException e) {
+                log.error("NacosCheck destroy failed caused by {}", e.getErrMsg());
+            }
+
+        }
+    }
+}
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/meta/NacosRegisterCheck.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/meta/NacosRegisterCheck.java
new file mode 100644
index 0000000..90ec2ea
--- /dev/null
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/meta/NacosRegisterCheck.java
@@ -0,0 +1,87 @@
+/*
+ * 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.eventmesh.dashboard.console.function.health.check.impl.meta;
+
+import static org.apache.eventmesh.dashboard.console.constant.health.HealthCheckTypeConstant.HEALTH_CHECK_SUBTYPE_NACOS_REGISTER;
+import static org.apache.eventmesh.dashboard.console.constant.health.HealthCheckTypeConstant.HEALTH_CHECK_TYPE_META;
+import static org.apache.eventmesh.dashboard.console.constant.health.HealthConstant.NACOS_CHECK_SERVICE_CLUSTER_NAME;
+import static org.apache.eventmesh.dashboard.console.constant.health.HealthConstant.NACOS_CHECK_SERVICE_NAME;
+
+import org.apache.eventmesh.dashboard.console.function.health.annotation.HealthCheckType;
+import org.apache.eventmesh.dashboard.console.function.health.callback.HealthCheckCallback;
+import org.apache.eventmesh.dashboard.console.function.health.check.AbstractHealthCheckService;
+import org.apache.eventmesh.dashboard.console.function.health.check.config.HealthCheckObjectConfig;
+
+import java.util.Properties;
+import java.util.concurrent.CompletableFuture;
+
+import com.alibaba.nacos.api.exception.NacosException;
+import com.alibaba.nacos.api.naming.NamingFactory;
+import com.alibaba.nacos.api.naming.NamingService;
+import com.alibaba.nacos.api.naming.pojo.Instance;
+
+import lombok.extern.slf4j.Slf4j;
+
+
+@Slf4j
+@HealthCheckType(type = HEALTH_CHECK_TYPE_META, subType = HEALTH_CHECK_SUBTYPE_NACOS_REGISTER)
+public class NacosRegisterCheck extends AbstractHealthCheckService {
+
+    private NamingService namingService;
+
+    public NacosRegisterCheck(HealthCheckObjectConfig healthCheckObjectConfig) {
+        super(healthCheckObjectConfig);
+    }
+
+    @Override
+    public void doCheck(HealthCheckCallback callback) {
+        CompletableFuture.runAsync(() -> {
+            try {
+                Instance result = namingService.selectOneHealthyInstance(NACOS_CHECK_SERVICE_NAME);
+                if (result.isHealthy()) {
+                    callback.onSuccess();
+                } else {
+                    callback.onFail(new RuntimeException("NacosCheck failed. Service is not healthy."));
+                }
+            } catch (NacosException e) {
+                callback.onFail(e);
+            }
+        });
+    }
+
+    @Override
+    public void init() {
+        try {
+            Properties properties = new Properties();
+            properties.put("serverAddr", getConfig().getConnectUrl());
+            namingService = NamingFactory.createNamingService(properties);
+            namingService.registerInstance(NACOS_CHECK_SERVICE_NAME, "11.11.11.11", 8888, NACOS_CHECK_SERVICE_CLUSTER_NAME);
+        } catch (NacosException e) {
+            log.error("NacosRegisterCheck init failed", e);
+        }
+    }
+
+    @Override
+    public void destroy() {
+        try {
+            namingService.deregisterInstance(NACOS_CHECK_SERVICE_NAME, "11.11.11.11", 8888, NACOS_CHECK_SERVICE_CLUSTER_NAME);
+        } catch (NacosException e) {
+            log.error("NacosRegisterCheck destroy failed", e);
+        }
+    }
+}
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/check/impl/StorageRedisCheck.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/storage/RedisCheck.java
similarity index 73%
rename from eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/check/impl/StorageRedisCheck.java
rename to eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/storage/RedisCheck.java
index 00cfad8..71488ac 100644
--- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/check/impl/StorageRedisCheck.java
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/storage/RedisCheck.java
@@ -15,12 +15,14 @@
  * limitations under the License.
  */
 
-package org.apache.eventmesh.dashboard.console.health.check.impl;
+package org.apache.eventmesh.dashboard.console.function.health.check.impl.storage;
 
-import org.apache.eventmesh.dashboard.console.health.annotation.HealthCheckType;
-import org.apache.eventmesh.dashboard.console.health.callback.HealthCheckCallback;
-import org.apache.eventmesh.dashboard.console.health.check.AbstractHealthCheckService;
-import org.apache.eventmesh.dashboard.console.health.check.config.HealthCheckObjectConfig;
+import static org.apache.eventmesh.dashboard.console.constant.health.HealthCheckTypeConstant.HEALTH_CHECK_TYPE_STORAGE;
+
+import org.apache.eventmesh.dashboard.console.function.health.annotation.HealthCheckType;
+import org.apache.eventmesh.dashboard.console.function.health.callback.HealthCheckCallback;
+import org.apache.eventmesh.dashboard.console.function.health.check.AbstractHealthCheckService;
+import org.apache.eventmesh.dashboard.console.function.health.check.config.HealthCheckObjectConfig;
 
 import java.time.Duration;
 import java.util.Objects;
@@ -30,13 +32,15 @@
 import io.lettuce.core.RedisURI.Builder;
 import io.lettuce.core.api.async.RedisAsyncCommands;
 
+import lombok.extern.slf4j.Slf4j;
 
-@HealthCheckType(type = "storage", subType = "redis")
-public class StorageRedisCheck extends AbstractHealthCheckService {
+@Slf4j
+@HealthCheckType(type = HEALTH_CHECK_TYPE_STORAGE, subType = "redis")
+public class RedisCheck extends AbstractHealthCheckService {
 
     private RedisClient redisClient;
 
-    public StorageRedisCheck(HealthCheckObjectConfig healthCheckObjectConfig) {
+    public RedisCheck(HealthCheckObjectConfig healthCheckObjectConfig) {
         super(healthCheckObjectConfig);
     }
 
@@ -55,6 +59,7 @@
                 return null;
             });
         } catch (Exception e) {
+            log.error(e.toString());
             callback.onFail(e);
         }
     }
@@ -79,4 +84,11 @@
         }
         redisClient = RedisClient.create(redisUrl);
     }
+
+    @Override
+    public void destroy() {
+        if (redisClient != null) {
+            redisClient.shutdown();
+        }
+    }
 }
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/storage/rocketmq4/Rocketmq4BrokerCheck.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/storage/rocketmq4/Rocketmq4BrokerCheck.java
new file mode 100644
index 0000000..5fb92cf
--- /dev/null
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/storage/rocketmq4/Rocketmq4BrokerCheck.java
@@ -0,0 +1,98 @@
+/*
+ * 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.eventmesh.dashboard.console.function.health.check.impl.storage.rocketmq4;
+
+
+import static org.apache.eventmesh.dashboard.console.constant.health.HealthCheckTypeConstant.HEALTH_CHECK_SUBTYPE_ROCKETMQ_BROKER;
+import static org.apache.eventmesh.dashboard.console.constant.health.HealthCheckTypeConstant.HEALTH_CHECK_TYPE_STORAGE;
+
+import org.apache.eventmesh.dashboard.console.function.health.annotation.HealthCheckType;
+import org.apache.eventmesh.dashboard.console.function.health.callback.HealthCheckCallback;
+import org.apache.eventmesh.dashboard.console.function.health.check.AbstractHealthCheckService;
+import org.apache.eventmesh.dashboard.console.function.health.check.config.HealthCheckObjectConfig;
+
+import org.apache.rocketmq.common.protocol.RequestCode;
+import org.apache.rocketmq.remoting.InvokeCallback;
+import org.apache.rocketmq.remoting.RemotingClient;
+import org.apache.rocketmq.remoting.netty.NettyClientConfig;
+import org.apache.rocketmq.remoting.netty.NettyRemotingClient;
+import org.apache.rocketmq.remoting.netty.ResponseFuture;
+import org.apache.rocketmq.remoting.protocol.RemotingCommand;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+@HealthCheckType(type = HEALTH_CHECK_TYPE_STORAGE, subType = HEALTH_CHECK_SUBTYPE_ROCKETMQ_BROKER)
+public class Rocketmq4BrokerCheck extends AbstractHealthCheckService {
+
+    private RemotingClient remotingClient;
+
+
+    public Rocketmq4BrokerCheck(HealthCheckObjectConfig healthCheckObjectConfig) {
+        super(healthCheckObjectConfig);
+    }
+
+    @Override
+    public void doCheck(HealthCheckCallback callback) {
+        try {
+            RemotingCommand request = RemotingCommand.createRequestCommand(RequestCode.GET_BROKER_RUNTIME_INFO, null);
+            remotingClient.invokeAsync(getConfig().getRocketmqConfig().getBrokerUrl(), request, getConfig().getRequestTimeoutMillis(),
+                new InvokeCallback() {
+                    @Override
+                    public void operationComplete(ResponseFuture responseFuture) {
+                        if (responseFuture.isSendRequestOK()) {
+                            callback.onSuccess();
+                        } else {
+                            callback.onFail(new RuntimeException("RocketmqNameServerCheck failed caused by " + responseFuture.getCause()));
+                        }
+                    }
+
+                });
+        } catch (Exception e) {
+            log.error("RocketmqCheck failed.", e);
+            callback.onFail(e);
+        }
+    }
+
+    @Override
+    public void init() {
+        if (getConfig().getRocketmqConfig().getBrokerUrl() == null || getConfig().getRocketmqConfig().getBrokerUrl().isEmpty()) {
+            throw new IllegalArgumentException("RocketmqCheck failed. BrokerUrl is null.");
+        }
+
+        NettyClientConfig config = new NettyClientConfig();
+        config.setUseTLS(false);
+        remotingClient = new NettyRemotingClient(config);
+        remotingClient.start();
+
+        if (getConfig().getConnectUrl() == null || getConfig().getConnectUrl().isEmpty()) {
+            if (getConfig().getHost() != null && getConfig().getPort() != null) {
+                getConfig().setConnectUrl(getConfig().getHost() + ":" + getConfig().getPort());
+            }
+        }
+
+        if (getConfig().getConnectUrl() == null) {
+            log.error("RocketmqCheck failed. ConnectUrl is null.");
+        }
+    }
+
+    @Override
+    public void destroy() {
+
+    }
+}
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/storage/rocketmq4/Rocketmq4NameServerCheck.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/storage/rocketmq4/Rocketmq4NameServerCheck.java
new file mode 100644
index 0000000..08df28b
--- /dev/null
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/storage/rocketmq4/Rocketmq4NameServerCheck.java
@@ -0,0 +1,85 @@
+/*
+ * 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.eventmesh.dashboard.console.function.health.check.impl.storage.rocketmq4;
+
+import org.apache.eventmesh.dashboard.console.constant.health.HealthCheckTypeConstant;
+import org.apache.eventmesh.dashboard.console.function.health.annotation.HealthCheckType;
+import org.apache.eventmesh.dashboard.console.function.health.callback.HealthCheckCallback;
+import org.apache.eventmesh.dashboard.console.function.health.check.AbstractHealthCheckService;
+import org.apache.eventmesh.dashboard.console.function.health.check.config.HealthCheckObjectConfig;
+
+import org.apache.rocketmq.common.protocol.RequestCode;
+import org.apache.rocketmq.remoting.InvokeCallback;
+import org.apache.rocketmq.remoting.RemotingClient;
+import org.apache.rocketmq.remoting.netty.NettyClientConfig;
+import org.apache.rocketmq.remoting.netty.NettyRemotingClient;
+import org.apache.rocketmq.remoting.netty.ResponseFuture;
+import org.apache.rocketmq.remoting.protocol.RemotingCommand;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+@HealthCheckType(type = HealthCheckTypeConstant.HEALTH_CHECK_TYPE_STORAGE, subType = HealthCheckTypeConstant.HEALTH_CHECK_SUBTYPE_ROCKETMQ_NAMESERVER)
+public class Rocketmq4NameServerCheck extends AbstractHealthCheckService {
+
+    private RemotingClient remotingClient;
+
+    public Rocketmq4NameServerCheck(HealthCheckObjectConfig healthCheckObjectConfig) {
+        super(healthCheckObjectConfig);
+    }
+
+    @Override
+    public void doCheck(HealthCheckCallback callback) {
+        try {
+            RemotingCommand request = RemotingCommand.createRequestCommand(RequestCode.GET_NAMESRV_CONFIG, null);
+            remotingClient.invokeAsync(getConfig().getRocketmqConfig().getNameServerUrl(), request, getConfig().getRequestTimeoutMillis(),
+                new InvokeCallback() {
+                    @Override
+                    public void operationComplete(ResponseFuture responseFuture) {
+                        if (responseFuture.isSendRequestOK()) {
+                            callback.onSuccess();
+                        } else {
+                            callback.onFail(new RuntimeException("RocketmqNameServerCheck failed caused by " + responseFuture.getCause()));
+                        }
+                    }
+
+                });
+        } catch (Exception e) {
+            log.error("RocketmqCheck failed.", e);
+            callback.onFail(e);
+        }
+    }
+
+    @Override
+    public void init() {
+        if (getConfig().getRocketmqConfig().getNameServerUrl() == null || getConfig().getRocketmqConfig().getNameServerUrl().isEmpty()) {
+            throw new RuntimeException("RocketmqNameServerCheck init failed, nameServerUrl is empty");
+        }
+
+        NettyClientConfig config = new NettyClientConfig();
+        config.setUseTLS(false);
+        remotingClient = new NettyRemotingClient(config);
+        remotingClient.start();
+
+    }
+
+    @Override
+    public void destroy() {
+
+    }
+}
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/storage/rocketmq4/Rocketmq4TopicCheck.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/storage/rocketmq4/Rocketmq4TopicCheck.java
new file mode 100644
index 0000000..7554762
--- /dev/null
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/storage/rocketmq4/Rocketmq4TopicCheck.java
@@ -0,0 +1,188 @@
+/*
+ * 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.eventmesh.dashboard.console.function.health.check.impl.storage.rocketmq4;
+
+import static org.apache.rocketmq.client.producer.SendStatus.SEND_OK;
+
+import org.apache.eventmesh.dashboard.console.constant.health.HealthCheckTypeConstant;
+import org.apache.eventmesh.dashboard.console.constant.health.HealthConstant;
+import org.apache.eventmesh.dashboard.console.function.health.annotation.HealthCheckType;
+import org.apache.eventmesh.dashboard.console.function.health.callback.HealthCheckCallback;
+import org.apache.eventmesh.dashboard.console.function.health.check.AbstractHealthCheckService;
+import org.apache.eventmesh.dashboard.console.function.health.check.config.HealthCheckObjectConfig;
+
+import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
+import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
+import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
+import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
+import org.apache.rocketmq.client.producer.DefaultMQProducer;
+import org.apache.rocketmq.client.producer.SendCallback;
+import org.apache.rocketmq.client.producer.SendResult;
+import org.apache.rocketmq.common.TopicFilterType;
+import org.apache.rocketmq.common.constant.PermName;
+import org.apache.rocketmq.common.message.Message;
+import org.apache.rocketmq.common.message.MessageExt;
+import org.apache.rocketmq.common.protocol.RequestCode;
+import org.apache.rocketmq.common.protocol.header.CreateTopicRequestHeader;
+import org.apache.rocketmq.common.protocol.heartbeat.MessageModel;
+import org.apache.rocketmq.remoting.RemotingClient;
+import org.apache.rocketmq.remoting.common.RemotingHelper;
+import org.apache.rocketmq.remoting.netty.NettyClientConfig;
+import org.apache.rocketmq.remoting.netty.NettyRemotingClient;
+import org.apache.rocketmq.remoting.protocol.RemotingCommand;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.UUID;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+@HealthCheckType(type = HealthCheckTypeConstant.HEALTH_CHECK_TYPE_STORAGE, subType = HealthCheckTypeConstant.HEALTH_CHECK_SUBTYPE_ROCKETMQ_TOPIC)
+public class Rocketmq4TopicCheck extends AbstractHealthCheckService {
+
+    private RemotingClient remotingClient;
+
+    private DefaultMQPushConsumer consumer;
+
+    private DefaultMQProducer producer;
+
+    private Long startTime;
+
+    private BlockingQueue<Message> consumedMessages = new LinkedBlockingQueue<>();
+
+    public Rocketmq4TopicCheck(HealthCheckObjectConfig healthCheckObjectConfig) {
+        super(healthCheckObjectConfig);
+    }
+
+    @Override
+    public void doCheck(HealthCheckCallback callback) {
+        startTime = System.currentTimeMillis();
+        String uuid = UUID.randomUUID().toString();
+        log.debug("RocketmqTopicCheck start, uuid:{}", uuid);
+        try {
+            Message msg = new Message(HealthConstant.ROCKETMQ_CHECK_TOPIC, "eventmesh-dashboard-rocketmq-topic-check", uuid
+                .getBytes(
+                    RemotingHelper.DEFAULT_CHARSET));
+            synchronized (this) {
+                producer.send(msg, new SendCallback() {
+                    @Override
+                    public void onSuccess(SendResult sendResult) {
+                        if (!sendResult.getSendStatus().equals(SEND_OK)) {
+                            log.error("send message failed, sendResult:{}", sendResult);
+                            callback.onFail(new Exception("send message failed for reason:" + sendResult.getSendStatus().toString()));
+                            return;
+                        }
+                        consume(callback, uuid);
+                    }
+
+                    @Override
+                    public void onException(Throwable e) {
+                        log.error("send message failed", e);
+                        callback.onFail((Exception) e);
+                    }
+                });
+            }
+
+        } catch (Exception e) {
+            log.error("RocketmqTopicCheck failed when producing message.", e);
+            callback.onFail(e);
+        }
+
+    }
+
+    private synchronized void consume(HealthCheckCallback callback, String uuid) {
+        try {
+            while (System.currentTimeMillis() - startTime < getConfig().getRequestTimeoutMillis()) {
+                Message message = consumedMessages.poll(System.currentTimeMillis() - startTime, TimeUnit.MILLISECONDS);
+                if (message != null) {
+                    log.debug("RocketmqTopicCheck consume message:{}", new String(message.getBody()));
+                    if (Arrays.equals(message.getBody(), uuid.getBytes())) {
+                        callback.onSuccess();
+                        return;
+                    }
+                }
+            }
+            callback.onFail(new TimeoutException("consume message timeout"));
+        } catch (Exception e) {
+            log.error("RocketmqTopicCheck failed when consuming message.", e);
+            callback.onFail(e);
+        }
+    }
+
+    @Override
+    public void init() {
+        NettyClientConfig config = new NettyClientConfig();
+        config.setUseTLS(false);
+        remotingClient = new NettyRemotingClient(config);
+        remotingClient.start();
+
+        //TODO there are many functions that can be reused, they should be collected in a util module
+        //this function that create topics can be reused
+        try {
+            CreateTopicRequestHeader requestHeader = new CreateTopicRequestHeader();
+            requestHeader.setTopic(HealthConstant.ROCKETMQ_CHECK_TOPIC);
+            requestHeader.setTopicFilterType(TopicFilterType.SINGLE_TAG.name());
+            requestHeader.setReadQueueNums(8);
+            requestHeader.setWriteQueueNums(8);
+            requestHeader.setPerm(PermName.PERM_READ | PermName.PERM_WRITE);
+            RemotingCommand request = RemotingCommand.createRequestCommand(RequestCode.UPDATE_AND_CREATE_TOPIC, requestHeader);
+            Object result = remotingClient.invokeSync(getConfig().getRocketmqConfig().getBrokerUrl(), request, getConfig().getRequestTimeoutMillis());
+            log.info(result.toString());
+        } catch (Exception e) {
+            log.error("RocketmqTopicCheck init failed when examining topic stats.", e);
+            return;
+        }
+
+        try {
+            producer = new DefaultMQProducer(HealthConstant.ROCKETMQ_CHECK_PRODUCER_GROUP);
+            producer.setNamesrvAddr(getConfig().getRocketmqConfig().getNameServerUrl());
+            producer.setCompressMsgBodyOverHowmuch(16);
+            producer.start();
+
+            consumer = new DefaultMQPushConsumer(HealthConstant.ROCKETMQ_CHECK_CONSUMER_GROUP);
+            consumer.setMessageModel(MessageModel.CLUSTERING);
+            consumer.setNamesrvAddr(getConfig().getRocketmqConfig().getNameServerUrl());
+            consumer.subscribe(HealthConstant.ROCKETMQ_CHECK_TOPIC, "*");
+            consumer.registerMessageListener(new MessageListenerConcurrently() {
+                @Override
+                public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
+                    consumedMessages.addAll(list);
+                    return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
+                }
+            });
+            consumer.start();
+
+        } catch (Exception e) {
+            log.error("RocketmqCheck initialization failed when creating Rocketmq4 clients.", e);
+        }
+
+
+    }
+
+    @Override
+    public void destroy() {
+        producer.shutdown();
+        consumer.shutdown();
+    }
+}
+
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/meta/MetaMapper.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/meta/MetaMapper.java
index ab57fc1..d51a9ef 100644
--- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/meta/MetaMapper.java
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/meta/MetaMapper.java
@@ -26,6 +26,8 @@
 import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
 
+import java.util.List;
+
 /**
  * Mybatis Mapper for the table of meta.
  */
@@ -35,7 +37,7 @@
     MetaEntity selectById(MetaEntity metaEntity);
 
     @Select("SELECT * FROM meta WHERE cluster_id = #{clusterId} LIMIT 1")
-    MetaEntity selectByClusterId(MetaEntity metaEntity);
+    List<MetaEntity> selectByClusterId(MetaEntity metaEntity);
 
     @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
     @Insert("INSERT INTO meta (name, type, version, cluster_id, host, port, role, username, params, status)"
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/FunctionManager.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/FunctionManager.java
index 50f5efb..a0a6130 100644
--- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/FunctionManager.java
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/FunctionManager.java
@@ -17,8 +17,8 @@
 
 package org.apache.eventmesh.dashboard.console.spring.support;
 
-import org.apache.eventmesh.dashboard.console.health.CheckResultCache;
-import org.apache.eventmesh.dashboard.console.health.HealthService;
+import org.apache.eventmesh.dashboard.console.function.health.CheckResultCache;
+import org.apache.eventmesh.dashboard.console.function.health.HealthService;
 import org.apache.eventmesh.dashboard.console.service.health.HealthDataService;
 
 import lombok.Getter;
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/FunctionManagerLoader.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/FunctionManagerLoader.java
index 405cedc..e2fcba4 100644
--- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/FunctionManagerLoader.java
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/FunctionManagerLoader.java
@@ -17,7 +17,7 @@
 
 package org.apache.eventmesh.dashboard.console.spring.support;
 
-import org.apache.eventmesh.dashboard.console.health.HealthService;
+import org.apache.eventmesh.dashboard.console.function.health.HealthService;
 import org.apache.eventmesh.dashboard.console.service.health.HealthDataService;
 
 import javax.annotation.PostConstruct;
diff --git a/eventmesh-dashboard-console/src/main/resources/application-dev.yml b/eventmesh-dashboard-console/src/main/resources/application-dev.yml
index 3074e0c..3b3c83b 100644
--- a/eventmesh-dashboard-console/src/main/resources/application-dev.yml
+++ b/eventmesh-dashboard-console/src/main/resources/application-dev.yml
@@ -44,12 +44,11 @@
       test-while-idle: true
       min-evictable-idle-time-millis: 300000
 
+logging:
+  config: classpath:logback-dev.xml
+
 mybatis:
   type-aliases-package: org.apache.eventmesh.dashboard.console.entity
 
-# cron job config, use cron expression
-cron:
-  #health check job
-  health: "0/15 * * * * ? *"
 
 
diff --git a/eventmesh-dashboard-console/src/main/resources/eventmesh-dashboard.sql b/eventmesh-dashboard-console/src/main/resources/eventmesh-dashboard.sql
index c24a554..7c5e38b 100644
--- a/eventmesh-dashboard-console/src/main/resources/eventmesh-dashboard.sql
+++ b/eventmesh-dashboard-console/src/main/resources/eventmesh-dashboard.sql
@@ -132,22 +132,23 @@
 DROP TABLE IF EXISTS `group`;
 CREATE TABLE `group`
 (
-    `id`           bigint unsigned                                  NOT NULL AUTO_INCREMENT COMMENT 'id',
-    `cluster_id`   bigint                                           NOT NULL DEFAULT '-1' COMMENT '集群id',
-    `name`         varchar(192) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT 'Group名称',
-    `member_count` int unsigned                                     NOT NULL DEFAULT '0' COMMENT '成员数',
+    `id`           bigint unsigned                                        NOT NULL AUTO_INCREMENT COMMENT 'id',
+    `cluster_id`   bigint                                                 NOT NULL DEFAULT '-1' COMMENT '集群id',
+    `name`         varchar(192) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT 'Group名称',
+    `member_count` int unsigned                                           NOT NULL DEFAULT '0' COMMENT '成员数',
     `members`      varchar(1024) COMMENT 'group的member列表',
-    `type`         tinyint                                          NOT NULL COMMENT 'group类型 0:consumer 1:producer',
-    `state`        varchar(64)                                      NOT NULL DEFAULT '' COMMENT '状态',
-    `create_time`  timestamp                                        NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
-    `update_time`  timestamp                                        NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
-    `is_delete`    int                                              NOT NULL DEFAULT '0',
+    `type`         tinyint                                                NOT NULL COMMENT 'group类型 0:consumer 1:producer',
+    `state`        varchar(64)                                            NOT NULL DEFAULT '' COMMENT '状态',
+    `create_time`  timestamp                                              NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+    `update_time`  timestamp                                              NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
+    `is_delete`    int                                                    NOT NULL DEFAULT '0',
     PRIMARY KEY (`id`),
     UNIQUE KEY `uniq_cluster_phy_id_name` (`cluster_id`, `name`),
     KEY `cluster_id` (`cluster_id`, `name`)
 ) ENGINE = InnoDB
   AUTO_INCREMENT = 322
-  DEFAULT CHARSET = utf8mb3 COMMENT ='Group信息表';
+  DEFAULT CHARSET = utf8mb4,
+  DEFAULT COLLATE = utf8mb4_bin COMMENT ='Group信息表';
 
 
 DROP TABLE IF EXISTS `group_member`;
@@ -167,7 +168,8 @@
     KEY `cluster_id` (`cluster_id`, `topic_name`, `group_name`)
 ) ENGINE = InnoDB
   AUTO_INCREMENT = 257
-  DEFAULT CHARSET = utf8mb3 COMMENT ='GroupMember信息表';
+  DEFAULT CHARSET = utf8mb4,
+  DEFAULT COLLATE = utf8mb4_bin COMMENT ='GroupMember信息表';
 
 
 DROP TABLE IF EXISTS `operation_log`;
@@ -189,29 +191,32 @@
     KEY `idx_status` (`status`)
 ) ENGINE = InnoDB
   AUTO_INCREMENT = 68
-  DEFAULT CHARSET = utf8mb3 COMMENT ='操作记录信息表';
+  DEFAULT CHARSET = utf8mb4,
+  DEFAULT COLLATE = utf8mb4_bin COMMENT ='操作记录信息表';
 
 
 DROP TABLE IF EXISTS `topic`;
 CREATE TABLE `topic`
 (
-    `id`           bigint unsigned                                  NOT NULL AUTO_INCREMENT COMMENT 'id',
-    `cluster_id`   bigint                                           NOT NULL DEFAULT '-1' COMMENT '集群ID',
-    `topic_name`   varchar(192) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT 'Topic名称',
-    `runtime_id`   varchar(2048)                                    NOT NULL DEFAULT '' COMMENT 'RuntimeId',
-    `storage_id`   varchar(2048)                                    NOT NULL DEFAULT '' COMMENT 'StorageId',
-    `retention_ms` bigint                                           NOT NULL DEFAULT '-2' COMMENT '保存时间,-2:未知,-1:无限制,>=0对应时间,单位ms',
-    `type`         tinyint                                          NOT NULL DEFAULT '0' COMMENT 'Topic类型,默认0,0:普通,1:EventMesh内部',
-    `description`  varchar(1024)                                             DEFAULT '' COMMENT '备注信息',
-    `create_time`  timestamp                                        NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间(尽量与Topic实际创建时间一致)',
-    `update_time`  timestamp                                        NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间(尽量与Topic实际创建时间一致)',
-    `is_delete`    int                                              NOT NULL DEFAULT '0',
+    `id`           bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
+    `cluster_id`   bigint          NOT NULL DEFAULT '-1' COMMENT '集群ID',
+    `topic_name`   varchar(192) CHARACTER SET utf8mb4
+        COLLATE utf8mb4_bin        NOT NULL DEFAULT '' COMMENT 'Topic名称',
+    `runtime_id`   varchar(2048)   NOT NULL DEFAULT '' COMMENT 'RuntimeId',
+    `storage_id`   varchar(2048)   NOT NULL DEFAULT '' COMMENT 'StorageId',
+    `retention_ms` bigint          NOT NULL DEFAULT '-2' COMMENT '保存时间,-2:未知,-1:无限制,>=0对应时间,单位ms',
+    `type`         tinyint         NOT NULL DEFAULT '0' COMMENT 'Topic类型,默认0,0:普通,1:EventMesh内部',
+    `description`  varchar(1024)            DEFAULT '' COMMENT '备注信息',
+    `create_time`  timestamp       NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间(尽量与Topic实际创建时间一致)',
+    `update_time`  timestamp       NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间(尽量与Topic实际创建时间一致)',
+    `is_delete`    int             NOT NULL DEFAULT '0',
     PRIMARY KEY (`id`),
     UNIQUE KEY `uniq_cluster_phy_id_topic_name` (`cluster_id`, `topic_name`),
     KEY `cluster_id` (`cluster_id`, `topic_name`)
 ) ENGINE = InnoDB
   AUTO_INCREMENT = 562
-  DEFAULT CHARSET = utf8mb3 COMMENT ='Topic信息表';
+  DEFAULT CHARSET = utf8mb4,
+  DEFAULT COLLATE = utf8mb4_bin COMMENT ='Topic信息表';
 
 
 DROP TABLE IF EXISTS `client`;
@@ -236,7 +241,8 @@
     PRIMARY KEY (`id`),
     INDEX `idx_cluster_id` (`cluster_id`)
 ) ENGINE = InnoDB
-  DEFAULT CHARSET = utf8 COMMENT ='client is an SDK application that can produce or consume events.';
+  DEFAULT CHARSET = utf8mb4,
+  DEFAULT COLLATE = utf8mb4_bin COMMENT ='client is an SDK application that can produce or consume events.';
 
 
 
@@ -256,7 +262,8 @@
     PRIMARY KEY (`id`),
     INDEX `idx_cluster_id` (`cluster_id`)
 ) ENGINE = InnoDB
-  DEFAULT CHARSET = utf8 COMMENT ='Connector信息表';
+  DEFAULT CHARSET = utf8mb4,
+  DEFAULT COLLATE = utf8mb4_bin COMMENT ='Connector信息表';
 
 DROP TABLE IF EXISTS `connection`;
 CREATE TABLE `connection`
@@ -283,7 +290,8 @@
     INDEX `idx_source_id` (`source_id`),
     INDEX `idx_sink_id` (`sink_id`)
 ) ENGINE = InnoDB
-  DEFAULT CHARSET = utf8 COMMENT ='connection from event source to event sink. event source can be a source connector or a producer client.';
+  DEFAULT CHARSET = utf8mb4,
+  DEFAULT COLLATE = utf8mb4_bin COMMENT ='connection from event source to event sink. event source can be a source connector or a producer client.';
 
 DROP TABLE IF EXISTS `health_check_result`;
 CREATE TABLE `health_check_result`
@@ -300,7 +308,8 @@
     INDEX `idx_cluster_id` (`cluster_id`),
     INDEX `idx_type` (`type`)
 ) ENGINE = InnoDB
-  DEFAULT CHARSET = utf8 COMMENT ='健康检查结果';
+  DEFAULT CHARSET = utf8mb4,
+  DEFAULT COLLATE = utf8mb4_bin COMMENT ='健康检查结果';
 
 DROP TABLE IF EXISTS `meta`;
 CREATE TABLE `meta`
@@ -324,4 +333,5 @@
     INDEX `idx_cluster_id` (`cluster_id`)
 
 ) ENGINE = InnoDB
-  DEFAULT CHARSET = utf8 COMMENT ='注册中心信息表';
\ No newline at end of file
+  DEFAULT CHARSET = utf8mb4,
+  DEFAULT COLLATE = utf8mb4_bin COMMENT ='注册中心信息表';
\ No newline at end of file
diff --git a/eventmesh-dashboard-console/src/main/resources/logback-dev.xml b/eventmesh-dashboard-console/src/main/resources/logback-dev.xml
new file mode 100644
index 0000000..e86bb3e
--- /dev/null
+++ b/eventmesh-dashboard-console/src/main/resources/logback-dev.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+
+<configuration>
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder charset="UTF-8">
+            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %p %t - %m%n</pattern>
+        </encoder>
+    </appender>
+
+    <appender name="FILE"
+        class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${user.home}/logs/eventmesh-dashboard.log</file>
+        <append>true</append>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${user.home}/logs/eventmesh-dashboard-%d{yyyy-MM-dd}.%i.log
+            </fileNamePattern>
+            <timeBasedFileNamingAndTriggeringPolicy
+                class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>104857600</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+            <MaxHistory>10</MaxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %p %t - %m%n</pattern>
+            <charset class="java.nio.charset.Charset">UTF-8</charset>
+        </encoder>
+    </appender>
+
+    <root level="DEBUG">
+        <appender-ref ref="STDOUT" />
+        <appender-ref ref="FILE" />
+    </root>
+
+</configuration>
\ No newline at end of file
diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/health/HealthExecutorTest.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/health/HealthExecutorTest.java
similarity index 93%
rename from eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/health/HealthExecutorTest.java
rename to eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/health/HealthExecutorTest.java
index d7626ed..e36eb61 100644
--- a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/health/HealthExecutorTest.java
+++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/health/HealthExecutorTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.eventmesh.dashboard.console.health;
+package org.apache.eventmesh.dashboard.console.function.health;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotEquals;
@@ -26,9 +26,9 @@
 import org.apache.eventmesh.dashboard.console.entity.health.HealthCheckResultEntity;
 import org.apache.eventmesh.dashboard.console.enums.health.HealthCheckStatus;
 import org.apache.eventmesh.dashboard.console.enums.health.HealthCheckType;
-import org.apache.eventmesh.dashboard.console.health.callback.HealthCheckCallback;
-import org.apache.eventmesh.dashboard.console.health.check.AbstractHealthCheckService;
-import org.apache.eventmesh.dashboard.console.health.check.config.HealthCheckObjectConfig;
+import org.apache.eventmesh.dashboard.console.function.health.callback.HealthCheckCallback;
+import org.apache.eventmesh.dashboard.console.function.health.check.AbstractHealthCheckService;
+import org.apache.eventmesh.dashboard.console.function.health.check.config.HealthCheckObjectConfig;
 import org.apache.eventmesh.dashboard.console.service.health.impl.HealthDataServiceDatabaseImpl;
 
 import java.util.concurrent.CompletableFuture;
@@ -77,7 +77,7 @@
         }).when(successHealthCheckService).doCheck(any(HealthCheckCallback.class));
         Mockito.lenient().doAnswer((Answer<Void>) invocation -> {
             HealthCheckCallback callback = invocation.getArgument(0);
-            callback.onFail(new RuntimeException("TestRuntimeException"));
+            callback.onFail(new RuntimeException("TestRuntimeException: This check is designed to be failed. Ignore This!"));
             return null;
         }).when(failHealthCheckService).doCheck(any(HealthCheckCallback.class));
         Mockito.lenient().doAnswer((Answer<Void>) invocation -> {
@@ -100,7 +100,7 @@
         config1.setHealthCheckResourceType("storage");
         config1.setHealthCheckResourceSubType("redis");
         config1.setConnectUrl("redis://localhost:6379");
-        config1.setSimpleClassName("StorageRedisCheck");
+        config1.setSimpleClassName("RedisCheck");
         config1.setClusterId(1L);
         Mockito.lenient().when(successHealthCheckService.getConfig()).thenReturn(config1);
         Mockito.lenient().when(timeoutHealthCheckService.getConfig()).thenReturn(config1);
@@ -109,7 +109,7 @@
         config2.setHealthCheckResourceType("storage");
         config2.setHealthCheckResourceSubType("redis");
         config2.setConnectUrl("redis://localhost:6379");
-        config2.setSimpleClassName("StorageRedisCheck");
+        config2.setSimpleClassName("RedisCheck");
         config2.setClusterId(1L);
         Mockito.lenient().when(failHealthCheckService.getConfig()).thenReturn(config2);
     }
diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/health/HealthServiceTest.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/health/HealthServiceTest.java
similarity index 88%
rename from eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/health/HealthServiceTest.java
rename to eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/health/HealthServiceTest.java
index 9a2c393..4d15316 100644
--- a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/health/HealthServiceTest.java
+++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/health/HealthServiceTest.java
@@ -15,11 +15,11 @@
  * limitations under the License.
  */
 
-package org.apache.eventmesh.dashboard.console.health;
+package org.apache.eventmesh.dashboard.console.function.health;
 
-import org.apache.eventmesh.dashboard.console.health.callback.HealthCheckCallback;
-import org.apache.eventmesh.dashboard.console.health.check.AbstractHealthCheckService;
-import org.apache.eventmesh.dashboard.console.health.check.config.HealthCheckObjectConfig;
+import org.apache.eventmesh.dashboard.console.function.health.callback.HealthCheckCallback;
+import org.apache.eventmesh.dashboard.console.function.health.check.AbstractHealthCheckService;
+import org.apache.eventmesh.dashboard.console.function.health.check.config.HealthCheckObjectConfig;
 import org.apache.eventmesh.dashboard.console.service.health.HealthDataService;
 
 import org.junit.jupiter.api.BeforeEach;
@@ -58,7 +58,7 @@
     void testInsertCheckServiceWithSimpleClassName() {
         HealthCheckObjectConfig config = new HealthCheckObjectConfig();
         config.setInstanceId(1L);
-        config.setSimpleClassName("StorageRedisCheck");
+        config.setSimpleClassName("RedisCheck");
         config.setHealthCheckResourceType("storage");
         config.setHealthCheckResourceSubType("redis");
         config.setClusterId(1L);
@@ -89,7 +89,7 @@
     }
 
     @Test
-    void testExecuteAll(){
+    void testExecuteAll() {
         HealthCheckObjectConfig config = new HealthCheckObjectConfig();
         config.setInstanceId(1L);
         config.setHealthCheckResourceType("storage");
@@ -115,5 +115,10 @@
         public void init() {
 
         }
+
+        @Override
+        public void destroy() {
+
+        }
     }
 }
\ No newline at end of file
diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/meta/NacosConfigCheckTest.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/meta/NacosConfigCheckTest.java
new file mode 100644
index 0000000..6613395
--- /dev/null
+++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/meta/NacosConfigCheckTest.java
@@ -0,0 +1,70 @@
+/*
+ * 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.eventmesh.dashboard.console.function.health.check.impl.meta;
+
+import org.apache.eventmesh.dashboard.console.function.health.callback.HealthCheckCallback;
+import org.apache.eventmesh.dashboard.console.function.health.check.config.HealthCheckObjectConfig;
+
+import java.util.concurrent.CountDownLatch;
+
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+class NacosConfigCheckTest {
+
+    private NacosConfigCheck nacosCheck;
+
+    @BeforeEach
+    public void init() {
+        HealthCheckObjectConfig config = new HealthCheckObjectConfig();
+        config.setInstanceId(1L);
+        config.setHealthCheckResourceType("meta");
+        config.setHealthCheckResourceSubType("nacos");
+        config.setClusterId(1L);
+        config.setConnectUrl("127.0.0.1:8848");
+        nacosCheck = new NacosConfigCheck(config);
+    }
+
+    @Test
+    public void testDoCheck() throws InterruptedException {
+        CountDownLatch latch = new CountDownLatch(1);
+        nacosCheck.doCheck(new HealthCheckCallback() {
+            @Override
+            public void onSuccess() {
+                latch.countDown();
+                log.info("{} success", this.getClass().getSimpleName());
+            }
+
+            @Override
+            public void onFail(Exception e) {
+                latch.countDown();
+                log.error("{}, failed for reason {}", this.getClass().getSimpleName(), e);
+            }
+        });
+        latch.await();
+    }
+
+    @AfterEach
+    public void destroy() {
+        nacosCheck.destroy();
+    }
+}
\ No newline at end of file
diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/meta/NacosRegisterCheckTest.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/meta/NacosRegisterCheckTest.java
new file mode 100644
index 0000000..1b97df1
--- /dev/null
+++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/meta/NacosRegisterCheckTest.java
@@ -0,0 +1,70 @@
+/*
+ * 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.eventmesh.dashboard.console.function.health.check.impl.meta;
+
+import org.apache.eventmesh.dashboard.console.function.health.callback.HealthCheckCallback;
+import org.apache.eventmesh.dashboard.console.function.health.check.config.HealthCheckObjectConfig;
+
+import java.util.concurrent.CountDownLatch;
+
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+class NacosRegisterCheckTest {
+
+    private NacosRegisterCheck nacosRegisterCheck;
+
+    @BeforeEach
+    public void init() {
+        HealthCheckObjectConfig config = new HealthCheckObjectConfig();
+        config.setInstanceId(1L);
+        config.setHealthCheckResourceType("meta");
+        config.setHealthCheckResourceSubType("nacos");
+        config.setClusterId(1L);
+        config.setConnectUrl("127.0.0.1:8848");
+        nacosRegisterCheck = new NacosRegisterCheck(config);
+    }
+
+    @Test
+    public void testDoCheck() throws InterruptedException {
+        CountDownLatch latch = new CountDownLatch(1);
+        nacosRegisterCheck.doCheck(new HealthCheckCallback() {
+            @Override
+            public void onSuccess() {
+                latch.countDown();
+                log.info("{} success", this.getClass().getSimpleName());
+            }
+
+            @Override
+            public void onFail(Exception e) {
+                latch.countDown();
+                log.error("{}, failed for reason {}", this.getClass().getSimpleName(), e);
+            }
+        });
+        latch.await();
+    }
+
+    @AfterEach
+    public void destroy() {
+        nacosRegisterCheck.destroy();
+    }
+}
\ No newline at end of file
diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/storage/RedisCheckTest.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/storage/RedisCheckTest.java
new file mode 100644
index 0000000..45cef81
--- /dev/null
+++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/storage/RedisCheckTest.java
@@ -0,0 +1,65 @@
+/*
+ * 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.eventmesh.dashboard.console.function.health.check.impl.storage;
+
+import org.apache.eventmesh.dashboard.console.function.health.callback.HealthCheckCallback;
+import org.apache.eventmesh.dashboard.console.function.health.check.config.HealthCheckObjectConfig;
+
+import java.util.concurrent.CountDownLatch;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+class RedisCheckTest {
+
+    private RedisCheck redisCheck;
+
+    @BeforeEach
+    public void init() {
+        HealthCheckObjectConfig config = new HealthCheckObjectConfig();
+        config.setInstanceId(1L);
+        config.setHealthCheckResourceType("storage");
+        config.setHealthCheckResourceSubType("redis");
+        config.setSimpleClassName("RedisCheck");
+        config.setClusterId(1L);
+        config.setConnectUrl("redis://127.0.0.1:6379");
+        redisCheck = new RedisCheck(config);
+    }
+
+    @Test
+    public void testDoCheck() throws InterruptedException {
+        CountDownLatch latch = new CountDownLatch(1);
+        redisCheck.doCheck(new HealthCheckCallback() {
+            @Override
+            public void onSuccess() {
+                latch.countDown();
+                log.info("{} success", this.getClass().getSimpleName());
+            }
+
+            @Override
+            public void onFail(Exception e) {
+                latch.countDown();
+                log.error("{}, failed for reason {}", this.getClass().getSimpleName(), e);
+            }
+        });
+        latch.await();
+    }
+}
\ No newline at end of file
diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/storage/rocketmq4/RocketmqBrokerCheckTest.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/storage/rocketmq4/RocketmqBrokerCheckTest.java
new file mode 100644
index 0000000..abf7ab2
--- /dev/null
+++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/storage/rocketmq4/RocketmqBrokerCheckTest.java
@@ -0,0 +1,61 @@
+/*
+ * 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.eventmesh.dashboard.console.function.health.check.impl.storage.rocketmq4;
+
+import org.apache.eventmesh.dashboard.console.function.health.callback.HealthCheckCallback;
+import org.apache.eventmesh.dashboard.console.function.health.check.config.HealthCheckObjectConfig;
+
+import java.util.concurrent.CountDownLatch;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+class RocketmqBrokerCheckTest {
+
+    private Rocketmq4BrokerCheck rocketmqCheck;
+
+    @BeforeEach
+    public void init() {
+        HealthCheckObjectConfig config = new HealthCheckObjectConfig();
+        config.getRocketmqConfig().setBrokerUrl("127.0.0.1:10911");
+        config.setRequestTimeoutMillis(1000L);
+        rocketmqCheck = new Rocketmq4BrokerCheck(config);
+    }
+
+    @Test
+    public void testDoCheck() throws InterruptedException {
+        CountDownLatch latch = new CountDownLatch(1);
+        rocketmqCheck.doCheck(new HealthCheckCallback() {
+            @Override
+            public void onSuccess() {
+                latch.countDown();
+                log.info("{} success", this.getClass().getSimpleName());
+            }
+
+            @Override
+            public void onFail(Exception e) {
+                latch.countDown();
+                log.error("{}, failed for reason {}", this.getClass().getSimpleName(), e);
+            }
+        });
+        latch.await();
+    }
+}
\ No newline at end of file
diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/storage/rocketmq4/RocketmqNameserverCheckTest.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/storage/rocketmq4/RocketmqNameserverCheckTest.java
new file mode 100644
index 0000000..92677ba
--- /dev/null
+++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/storage/rocketmq4/RocketmqNameserverCheckTest.java
@@ -0,0 +1,61 @@
+/*
+ * 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.eventmesh.dashboard.console.function.health.check.impl.storage.rocketmq4;
+
+import org.apache.eventmesh.dashboard.console.function.health.callback.HealthCheckCallback;
+import org.apache.eventmesh.dashboard.console.function.health.check.config.HealthCheckObjectConfig;
+
+import java.util.concurrent.CountDownLatch;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+class RocketmqNameserverCheckTest {
+
+    private Rocketmq4NameServerCheck rocketmqCheck;
+
+    @BeforeEach
+    public void init() {
+        HealthCheckObjectConfig config = new HealthCheckObjectConfig();
+        config.getRocketmqConfig().setNameServerUrl("127.0.0.1:9876");
+        config.setRequestTimeoutMillis(1000L);
+        rocketmqCheck = new Rocketmq4NameServerCheck(config);
+    }
+
+    @Test
+    public void testDoCheck() throws InterruptedException {
+        CountDownLatch latch = new CountDownLatch(1);
+        rocketmqCheck.doCheck(new HealthCheckCallback() {
+            @Override
+            public void onSuccess() {
+                latch.countDown();
+                log.info("{} success", this.getClass().getSimpleName());
+            }
+
+            @Override
+            public void onFail(Exception e) {
+                latch.countDown();
+                log.error("{}, failed for reason {}", this.getClass().getSimpleName(), e);
+            }
+        });
+        latch.await();
+    }
+}
\ No newline at end of file
diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/storage/rocketmq4/RocketmqTopicCheckTest.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/storage/rocketmq4/RocketmqTopicCheckTest.java
new file mode 100644
index 0000000..8a90a5b
--- /dev/null
+++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/health/check/impl/storage/rocketmq4/RocketmqTopicCheckTest.java
@@ -0,0 +1,75 @@
+/*
+ * 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.eventmesh.dashboard.console.function.health.check.impl.storage.rocketmq4;
+
+import org.apache.eventmesh.dashboard.console.function.health.callback.HealthCheckCallback;
+import org.apache.eventmesh.dashboard.console.function.health.check.config.HealthCheckObjectConfig;
+
+import java.util.concurrent.CountDownLatch;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+class RocketmqTopicCheckTest {
+
+    private Rocketmq4TopicCheck rocketmqCheck;
+
+    @BeforeEach
+    public void init() throws InterruptedException {
+        HealthCheckObjectConfig config = new HealthCheckObjectConfig();
+        config.getRocketmqConfig().setBrokerUrl("127.0.0.1:10911");
+        config.getRocketmqConfig().setNameServerUrl("127.0.0.1:9876");
+        config.setRequestTimeoutMillis(1000000L);
+        rocketmqCheck = new Rocketmq4TopicCheck(config);
+    }
+
+    @Test
+    public void testDoCheck() throws InterruptedException {
+        CountDownLatch latch = new CountDownLatch(2);
+        rocketmqCheck.doCheck(new HealthCheckCallback() {
+            @Override
+            public void onSuccess() {
+                latch.countDown();
+                log.info("{} success", this.getClass().getSimpleName());
+            }
+
+            @Override
+            public void onFail(Exception e) {
+                latch.countDown();
+                log.error("{}, failed for reason {}", this.getClass().getSimpleName(), e);
+            }
+        });
+        rocketmqCheck.doCheck(new HealthCheckCallback() {
+            @Override
+            public void onSuccess() {
+                latch.countDown();
+                log.info("{} success", this.getClass().getSimpleName());
+            }
+
+            @Override
+            public void onFail(Exception e) {
+                latch.countDown();
+                log.error("{}, failed for reason {}", this.getClass().getSimpleName(), e);
+            }
+        });
+        latch.await();
+    }
+}
\ No newline at end of file
diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/health/check/impl/StorageRedisCheckTest.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/health/check/impl/StorageRedisCheckTest.java
deleted file mode 100644
index 74ac54c..0000000
--- a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/health/check/impl/StorageRedisCheckTest.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * 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.eventmesh.dashboard.console.health.check.impl;
-
-import org.apache.eventmesh.dashboard.console.health.callback.HealthCheckCallback;
-import org.apache.eventmesh.dashboard.console.health.check.config.HealthCheckObjectConfig;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
-class StorageRedisCheckTest {
-
-    private StorageRedisCheck storageRedisCheck;
-
-    @BeforeEach
-    public void init() {
-        HealthCheckObjectConfig config = new HealthCheckObjectConfig();
-        config.setInstanceId(1L);
-        config.setHealthCheckResourceType("storage");
-        config.setHealthCheckResourceSubType("redis");
-        config.setSimpleClassName("StorageRedisCheck");
-        config.setClusterId(1L);
-        config.setConnectUrl("redis://localhost:6379");
-        storageRedisCheck = new StorageRedisCheck(config);
-    }
-
-    @Test
-    public void testDoCheck() {
-        storageRedisCheck.doCheck(new HealthCheckCallback() {
-            @Override
-            public void onSuccess() {
-                System.out.println("success");
-            }
-
-            @Override
-            public void onFail(Exception e) {
-                System.out.println("fail");
-            }
-        });
-    }
-}
\ No newline at end of file
diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/integration/health/HealthServiceIntegrateTest.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/integration/health/HealthServiceIntegrateTest.java
index e8fdb5f..2a780f4 100644
--- a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/integration/health/HealthServiceIntegrateTest.java
+++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/integration/health/HealthServiceIntegrateTest.java
@@ -19,9 +19,9 @@
 
 import org.apache.eventmesh.dashboard.console.entity.health.HealthCheckResultEntity;
 import org.apache.eventmesh.dashboard.console.enums.health.HealthCheckType;
-import org.apache.eventmesh.dashboard.console.health.CheckResultCache;
-import org.apache.eventmesh.dashboard.console.health.HealthService;
-import org.apache.eventmesh.dashboard.console.health.check.config.HealthCheckObjectConfig;
+import org.apache.eventmesh.dashboard.console.function.health.CheckResultCache;
+import org.apache.eventmesh.dashboard.console.function.health.HealthService;
+import org.apache.eventmesh.dashboard.console.function.health.check.config.HealthCheckObjectConfig;
 import org.apache.eventmesh.dashboard.console.service.health.HealthDataService;
 
 import java.util.List;
@@ -38,12 +38,14 @@
 @ActiveProfiles("test")
 @Sql(executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD, scripts = {"classpath:use-test-schema.sql", "classpath:eventmesh-dashboard.sql"})
 public class HealthServiceIntegrateTest {
+
     HealthService healthService = new HealthService();
 
     @Autowired
     private HealthDataService healthDataService;
 
     private final CheckResultCache checkResultCache = new CheckResultCache();
+
     @BeforeEach
     void init() {
         healthService.createExecutor(healthDataService, checkResultCache);
@@ -66,7 +68,7 @@
         queryEntity.setClusterId(1L);
         queryEntity.setType(HealthCheckType.STORAGE.getNumber());
         queryEntity.setTypeId(1L);
-        List<HealthCheckResultEntity> results =  healthDataService.queryHealthCheckResultByClusterIdAndTypeAndTypeId(queryEntity);
-        Assertions.assertEquals(2,results.size());
+        List<HealthCheckResultEntity> results = healthDataService.queryHealthCheckResultByClusterIdAndTypeAndTypeId(queryEntity);
+        Assertions.assertEquals(2, results.size());
     }
 }
diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/linkage/log/TestOprLog.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/linkage/log/TestOprLog.java
index afaf8d8..9004738 100644
--- a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/linkage/log/TestOprLog.java
+++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/linkage/log/TestOprLog.java
@@ -1,3 +1,20 @@
+/*
+ * 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.eventmesh.dashboard.console.linkage.log;
 
 import org.apache.eventmesh.dashboard.console.EventMeshDashboardApplication;
diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/mapper/connection/ConnectionMapperTest.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/mapper/connection/ConnectionMapperTest.java
index 4f28229..6106e17 100644
--- a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/mapper/connection/ConnectionMapperTest.java
+++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/mapper/connection/ConnectionMapperTest.java
@@ -83,15 +83,15 @@
 
     @Test
     public void testInsert() {
-        ConnectionEntity connectionEntity = new ConnectionEntity(1L, 1L, "connector", 1L, "connector", 2L, 1L, 0, "topic", 3L, null, "description");
+        ConnectionEntity connectionEntity = new ConnectionEntity(1L, "connector", 1L, "connector", 2L, 1L, 0, "topic", 3L, null, "description");
         connectionMapper.insert(connectionEntity);
         assertEquals(7, connectionMapper.selectAll().size());
     }
 
     @Test
     public void testBatchInsert() {
-        ConnectionEntity connectionEntity1 = new ConnectionEntity(1L, 1L, "connector", 1L, "connector", 2L, 1L, 0, "topic", 3L, null, "description");
-        ConnectionEntity connectionEntity2 = new ConnectionEntity(1L, 1L, "connector", 1L, "connector", 2L, 1L, 0, "topic", 3L, null, "description");
+        ConnectionEntity connectionEntity1 = new ConnectionEntity(1L, "connector", 1L, "connector", 2L, 1L, 0, "topic", 3L, null, "description");
+        ConnectionEntity connectionEntity2 = new ConnectionEntity(1L, "connector", 1L, "connector", 2L, 1L, 0, "topic", 3L, null, "description");
         connectionMapper.batchInsert(Arrays.asList(connectionEntity1, connectionEntity2));
         assertEquals(8, connectionMapper.selectAll().size());
     }
diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/mapper/connector/ConnectorMapperTest.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/mapper/connector/ConnectorMapperTest.java
index 0bb360b..786597d 100644
--- a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/mapper/connector/ConnectorMapperTest.java
+++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/mapper/connector/ConnectorMapperTest.java
@@ -69,7 +69,7 @@
 
     @Test
     public void testInsert() {
-        ConnectorEntity connectorEntity = new ConnectorEntity(1L, 1L, "test", "test", "test", 0, 2, "test");
+        ConnectorEntity connectorEntity = new ConnectorEntity(1L, "test", "test", "test", 0, 2, "test");
         connectorMapper.insert(connectorEntity);
 
         assertNotNull(connectorEntity);
@@ -78,9 +78,9 @@
 
     @Test
     public void testBatchInsert() {
-        ConnectorEntity connectorEntity1 = new ConnectorEntity(1L, 1L, "test", "test", "test", 0, 2, "test");
-        ConnectorEntity connectorEntity2 = new ConnectorEntity(1L, 1L, "test", "test", "test", 0, 2, "test");
-        ConnectorEntity connectorEntity3 = new ConnectorEntity(1L, 1L, "test", "test", "test", 0, 2, "test");
+        ConnectorEntity connectorEntity1 = new ConnectorEntity(1L, "test", "test", "test", 0, 2, "test");
+        ConnectorEntity connectorEntity2 = new ConnectorEntity(1L, "test", "test", "test", 0, 2, "test");
+        ConnectorEntity connectorEntity3 = new ConnectorEntity(1L, "test", "test", "test", 0, 2, "test");
         List<ConnectorEntity> connectorEntityList = new ArrayList<>();
         connectorEntityList.add(connectorEntity1);
         connectorEntityList.add(connectorEntity2);
diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/mapper/health/HealthCheckResultMapperTest.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/mapper/health/HealthCheckResultMapperTest.java
index 1ceb8fc..30e6690 100644
--- a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/mapper/health/HealthCheckResultMapperTest.java
+++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/mapper/health/HealthCheckResultMapperTest.java
@@ -17,7 +17,7 @@
 
 package org.apache.eventmesh.dashboard.console.mapper.health;
 
-import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import org.apache.eventmesh.dashboard.console.EventMeshDashboardApplication;
 import org.apache.eventmesh.dashboard.console.entity.health.HealthCheckResultEntity;
@@ -58,7 +58,7 @@
 
     @Test
     public void testSelectByClusterIdAndTypeAndTypeId() {
-        HealthCheckResultEntity healthCheckResultEntity = new HealthCheckResultEntity(1L, 1L, 1, 1L, "", 1);
+        HealthCheckResultEntity healthCheckResultEntity = new HealthCheckResultEntity(1L, 1, 1L, "", 1);
         healthCheckResultEntity = healthCheckResultMapper.selectByClusterIdAndTypeAndTypeId(healthCheckResultEntity).get(0);
         assertEquals(1, healthCheckResultEntity.getId());
         assertEquals(0, healthCheckResultEntity.getStatus());
@@ -66,7 +66,7 @@
 
     @Test
     public void testSelectByClusterIdAndType() {
-        HealthCheckResultEntity healthCheckResultEntity = new HealthCheckResultEntity(1L, 1L, 1, 1L, "", 1);
+        HealthCheckResultEntity healthCheckResultEntity = new HealthCheckResultEntity(1L, 1, 1L, "", 1);
         List<HealthCheckResultEntity> results = healthCheckResultMapper.selectByClusterIdAndType(healthCheckResultEntity);
         assertEquals(2, results.size());
     }
@@ -84,7 +84,7 @@
 
     @Test
     public void testInsert() {
-        HealthCheckResultEntity healthCheckResultEntity = new HealthCheckResultEntity(1L, 5L, 1, 5L, "", 1);
+        HealthCheckResultEntity healthCheckResultEntity = new HealthCheckResultEntity(5L, 1, 5L, "", 1);
         healthCheckResultMapper.insert(healthCheckResultEntity);
         healthCheckResultEntity = healthCheckResultMapper.selectById(healthCheckResultEntity);
         assertEquals(7, healthCheckResultEntity.getId());
@@ -92,8 +92,8 @@
 
     @Test
     public void testBatchInsert() {
-        HealthCheckResultEntity healthCheckResultEntity1 = new HealthCheckResultEntity(1L, 1L, 1, 5L, "", 1);
-        HealthCheckResultEntity healthCheckResultEntity2 = new HealthCheckResultEntity(1L, 1L, 1, 6L, "", 1);
+        HealthCheckResultEntity healthCheckResultEntity1 = new HealthCheckResultEntity(1L, 1, 5L, "", 1);
+        HealthCheckResultEntity healthCheckResultEntity2 = new HealthCheckResultEntity(1L, 1, 6L, "", 1);
         healthCheckResultMapper.batchInsert(Arrays.asList(healthCheckResultEntity1, healthCheckResultEntity2));
         List<HealthCheckResultEntity> results = healthCheckResultMapper.selectByClusterIdAndType(healthCheckResultEntity1);
         assertEquals(4, results.size());
@@ -101,7 +101,7 @@
 
     @Test
     public void testUpdate() {
-        HealthCheckResultEntity healthCheckResultEntity = new HealthCheckResultEntity(1L, 1L, 1, 1L, "reason", 0);
+        HealthCheckResultEntity healthCheckResultEntity = new HealthCheckResultEntity(1L, 1, 1L, "reason", 0);
         healthCheckResultMapper.update(healthCheckResultEntity);
         healthCheckResultEntity = healthCheckResultMapper.selectByClusterIdAndTypeAndTypeId(healthCheckResultEntity).get(0);
         assertEquals(0, healthCheckResultEntity.getStatus());
@@ -109,8 +109,10 @@
 
     @Test
     public void testBatchUpdate() {
-        HealthCheckResultEntity healthCheckResultEntity1 = new HealthCheckResultEntity(1L, 1L, 1, 1L, "reason", 0);
-        HealthCheckResultEntity healthCheckResultEntity2 = new HealthCheckResultEntity(2L, 1L, 1, 1L, "reason", 0);
+        HealthCheckResultEntity healthCheckResultEntity1 = new HealthCheckResultEntity(1L, 1, 1L, "reason", 0);
+        healthCheckResultEntity1.setId(1L);
+        HealthCheckResultEntity healthCheckResultEntity2 = new HealthCheckResultEntity(1L, 1, 1L, "reason", 0);
+        healthCheckResultEntity2.setId(2L);
         healthCheckResultMapper.batchUpdate(Arrays.asList(healthCheckResultEntity1, healthCheckResultEntity2));
         healthCheckResultEntity1 = healthCheckResultMapper.selectById(healthCheckResultEntity1);
         healthCheckResultEntity2 = healthCheckResultMapper.selectById(healthCheckResultEntity2);
@@ -121,8 +123,8 @@
 
     @Test
     public void testUpdateByClusterIdAndTypeAndTypeId() {
-        HealthCheckResultEntity entity1 = new HealthCheckResultEntity(null, 1L, 1, 1L, "reason", 2);
-        HealthCheckResultEntity entity2 = new HealthCheckResultEntity(null, 1L, 1, 1L, "reason", 2);
+        HealthCheckResultEntity entity1 = new HealthCheckResultEntity(1L, 1, 1L, "reason", 2);
+        HealthCheckResultEntity entity2 = new HealthCheckResultEntity(1L, 1, 1L, "reason", 2);
         healthCheckResultMapper.batchInsert(Arrays.asList(entity1, entity2));
 
         List<HealthCheckResultEntity> toBeUpdate = healthCheckResultMapper.getIdsNeedToBeUpdateByClusterIdAndTypeAndTypeId(
diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/mapper/meta/MetaMapperTest.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/mapper/meta/MetaMapperTest.java
index 9d05b40..5888eda 100644
--- a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/mapper/meta/MetaMapperTest.java
+++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/mapper/meta/MetaMapperTest.java
@@ -20,6 +20,7 @@
 import org.apache.eventmesh.dashboard.console.EventMeshDashboardApplication;
 import org.apache.eventmesh.dashboard.console.entity.meta.MetaEntity;
 
+import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -42,6 +43,7 @@
     public void testSelectByClusterId() {
         MetaEntity metaEntity = new MetaEntity();
         metaEntity.setClusterId(1L);
-        metaEntity = metaMapper.selectByClusterId(metaEntity);
+        metaEntity = metaMapper.selectByClusterId(metaEntity).get(0);
+        Assertions.assertEquals("nacos", metaEntity.getType());
     }
 }
\ No newline at end of file
diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/unit/group/TestGroupMapper.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/unit/group/GroupMapperTest.java
similarity index 82%
rename from eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/unit/group/TestGroupMapper.java
rename to eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/unit/group/GroupMapperTest.java
index f02fcaf..41eca99 100644
--- a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/unit/group/TestGroupMapper.java
+++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/unit/group/GroupMapperTest.java
@@ -1,3 +1,20 @@
+/*
+ * 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.eventmesh.dashboard.console.unit.group;
 
 import org.apache.eventmesh.dashboard.console.EventMeshDashboardApplication;
@@ -16,7 +33,7 @@
 
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = EventMeshDashboardApplication.class)
-public class TestGroupMapper {
+public class GroupMapperTest {
 
     @Autowired
     private OprGroupMapper groupMapper;
diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/unit/groupmember/testGroupMemberMapper.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/unit/groupmember/GroupMemberMapperTest.java
similarity index 88%
rename from eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/unit/groupmember/testGroupMemberMapper.java
rename to eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/unit/groupmember/GroupMemberMapperTest.java
index d3a20a0..76fa849 100644
--- a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/unit/groupmember/testGroupMemberMapper.java
+++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/unit/groupmember/GroupMemberMapperTest.java
@@ -1,3 +1,20 @@
+/*
+ * 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.eventmesh.dashboard.console.unit.groupmember;
 
 import org.apache.eventmesh.dashboard.console.EventMeshDashboardApplication;
@@ -16,7 +33,7 @@
 
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = EventMeshDashboardApplication.class)
-public class testGroupMemberMapper {
+public class GroupMemberMapperTest {
 
     @Autowired
     OprGroupMemberMapper groupMemberMapper;
diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/unit/topic/testTopicMapper.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/unit/topic/TopicMapperTest.java
similarity index 84%
rename from eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/unit/topic/testTopicMapper.java
rename to eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/unit/topic/TopicMapperTest.java
index 7472792..929953a 100644
--- a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/unit/topic/testTopicMapper.java
+++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/unit/topic/TopicMapperTest.java
@@ -1,3 +1,20 @@
+/*
+ * 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.eventmesh.dashboard.console.unit.topic;
 
 import org.apache.eventmesh.dashboard.console.EventMeshDashboardApplication;
@@ -16,7 +33,7 @@
 
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = EventMeshDashboardApplication.class)
-public class testTopicMapper {
+public class TopicMapperTest {
 
     @Autowired
     private TopicMapper topicMapper;
diff --git a/eventmesh-dashboard-console/src/test/resources/logback-test.xml b/eventmesh-dashboard-console/src/test/resources/logback-test.xml
new file mode 100644
index 0000000..e86bb3e
--- /dev/null
+++ b/eventmesh-dashboard-console/src/test/resources/logback-test.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+
+<configuration>
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder charset="UTF-8">
+            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %p %t - %m%n</pattern>
+        </encoder>
+    </appender>
+
+    <appender name="FILE"
+        class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${user.home}/logs/eventmesh-dashboard.log</file>
+        <append>true</append>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${user.home}/logs/eventmesh-dashboard-%d{yyyy-MM-dd}.%i.log
+            </fileNamePattern>
+            <timeBasedFileNamingAndTriggeringPolicy
+                class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>104857600</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+            <MaxHistory>10</MaxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %p %t - %m%n</pattern>
+            <charset class="java.nio.charset.Charset">UTF-8</charset>
+        </encoder>
+    </appender>
+
+    <root level="DEBUG">
+        <appender-ref ref="STDOUT" />
+        <appender-ref ref="FILE" />
+    </root>
+
+</configuration>
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 68372bf..f0645ad 100644
--- a/pom.xml
+++ b/pom.xml
@@ -74,13 +74,14 @@
     <url>https://github.com/apache/eventmesh-dashboard/issues</url>
   </issueManagement>
 
-  <properties>
-    <maven.compiler.source>8</maven.compiler.source>
-    <maven.compiler.target>8</maven.compiler.target>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    <spring-boot.version>2.7.6</spring-boot.version>
-    <mybatis-spring-boot.version>2.3.2</mybatis-spring-boot.version>
-  </properties>
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <spring-boot.version>2.7.6</spring-boot.version>
+        <mybatis-spring-boot.version>2.3.2</mybatis-spring-boot.version>
+        <nacos.version>2.1.2</nacos.version>
+    </properties>
 
   <modules>
     <module>eventmesh-dashboard-console</module>
@@ -135,17 +136,6 @@
           </execution>
         </executions>
       </plugin>
-
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <version>3.2.2</version>
-        <configuration>
-          <excludes>
-            <exclude>**/org/apache/eventmesh/dashboard/console/integration/**/*.java</exclude>
-          </excludes>
-        </configuration>
-      </plugin>
     </plugins>
   </build>
 </project>
\ No newline at end of file