diff --git a/docker/latest/Dockerfile b/docker/latest/Dockerfile
index 5ce8b3e..a4e4f75 100644
--- a/docker/latest/Dockerfile
+++ b/docker/latest/Dockerfile
@@ -25,7 +25,7 @@
 COPY --from=0 /source/dubbo-admin-snapshot/dubbo-admin-distribution/target/dubbo-admin-0.3.0-SNAPSHOT.jar /app.jar
 COPY --from=0 /source/dubbo-admin-snapshot/docker/entrypoint.sh /usr/local/bin/entrypoint.sh
 
-ENV JAVA_OPTS ""
+ENV JAVA_OPTS "-Dloader.path=/opt-libs"
 
 ENTRYPOINT ["tini", "--", "/usr/local/bin/entrypoint.sh"]
 EXPOSE 8080
diff --git a/docker/stack.yml b/docker/stack.yml
index ebb35f2..0392bc1 100644
--- a/docker/stack.yml
+++ b/docker/stack.yml
@@ -26,7 +26,20 @@
       - zookeeper
     ports:
       - 8080:8080
+# the db driver path
+    volumes:
+      - "/mnt/opt-libs:/opt-libs"
     environment:
       - admin.registry.address=zookeeper://zookeeper:2181
       - admin.config-center=zookeeper://zookeeper:2181
-      - admin.metadata-report.address=zookeeper://zookeeper:2181
\ No newline at end of file
+      - admin.metadata-report.address=zookeeper://zookeeper:2181
+      - dubbo.application.name=dubbo-admin
+      - dubbo.registry.address=zookeeper://zookeeper:2181
+      - mybatis-plus.global-config.db-config.id-type=none
+      - spring.datasource.driver-class-name=com.mysql.jdbc.Driver
+      - spring.datasource.url=jdbc:mysql://xxx:3306/dubbo-admin?characterEncoding=utf8&connectTimeout=1000&socketTimeout=10000&autoReconnect=true
+      - spring.datasource.username=root
+      - spring.datasource.password=mysql
+# use internal h2 as database
+#      - spring.datasource.url=jdbc:h2:mem:~/dubbo-admin;
+#      - spring.datasource.username=sa
\ No newline at end of file
diff --git a/dubbo-admin-distribution/src/bin/config/application.properties b/dubbo-admin-distribution/src/bin/config/application.properties
index df17468..dbbc16c 100644
--- a/dubbo-admin-distribution/src/bin/config/application.properties
+++ b/dubbo-admin-distribution/src/bin/config/application.properties
@@ -56,3 +56,21 @@
 server.compression.enabled=true
 server.compression.mime-types=text/css,text/javascript,application/javascript
 server.compression.min-response-size=10240
+
+#dubbo config
+dubbo.application.name=dubbo-admin
+dubbo.registry.address=${admin.registry.address}
+
+# mysql
+#spring.datasource.driver-class-name=com.mysql.jdbc.Driver
+#spring.datasource.url=jdbc:mysql://localhost:3306/dubbo-admin?characterEncoding=utf8&connectTimeout=1000&socketTimeout=10000&autoReconnect=true
+#spring.datasource.username=root
+#spring.datasource.password=mysql
+
+# h2
+spring.datasource.url=jdbc:h2:mem:~/dubbo-admin;
+spring.datasource.username=sa
+spring.datasource.password=
+
+# id generate type
+mybatis-plus.global-config.db-config.id-type=none
\ No newline at end of file
diff --git a/dubbo-admin-distribution/src/bin/startup.cmd b/dubbo-admin-distribution/src/bin/startup.cmd
index 67af660..5a78317 100644
--- a/dubbo-admin-distribution/src/bin/startup.cmd
+++ b/dubbo-admin-distribution/src/bin/startup.cmd
@@ -26,6 +26,6 @@
 
 set "JAVA_OPT=%JAVA_OPT% -Xms512m -Xmx512m -Xmn256m"
 
-set "JAVA_OPT=%JAVA_OPT% -jar %BASE_DIR%\lib\%SERVER%.jar"
+set "JAVA_OPT=%JAVA_OPT% -Dloader.path=%BASE_DIR%\opt-libs -jar %BASE_DIR%\lib\%SERVER%.jar"
 
 call "%JAVA%" %JAVA_OPT% dubbo.admin %*
diff --git a/dubbo-admin-distribution/src/bin/startup.sh b/dubbo-admin-distribution/src/bin/startup.sh
index 765f814..3bb5e72 100644
--- a/dubbo-admin-distribution/src/bin/startup.sh
+++ b/dubbo-admin-distribution/src/bin/startup.sh
@@ -63,6 +63,6 @@
 fi
 
 JAVA_OPT="${JAVA_OPT} -Xms512m -Xmx512m -Xmn256m"
-JAVA_OPT="${JAVA_OPT} -jar ${BASE_DIR}/lib/${SERVER}.jar"
-nohup $JAVA ${JAVA_OPT} dubbo.admin >> ${BASE_DIR}/logs/catlog.out 2>&1 &
+JAVA_OPT="${JAVA_OPT} -Dloader.path=${BASE_DIR}/opt-libs -jar ${BASE_DIR}/lib/${SERVER}.jar"
+nohup "$JAVA" ${JAVA_OPT} dubbo.admin >> ${BASE_DIR}/logs/catlog.out 2>&1 &
 echo "${SERVER} is starting，you can check the ${BASE_DIR}/logs/catlog.out"
\ No newline at end of file
diff --git a/dubbo-admin-server/pom.xml b/dubbo-admin-server/pom.xml
index 2eaa4f3..73be90f 100644
--- a/dubbo-admin-server/pom.xml
+++ b/dubbo-admin-server/pom.xml
@@ -204,6 +204,30 @@
             <version>${jjwt-version}</version>
         </dependency>
 
+
+        <dependency>
+            <groupId>org.apache.dubbo.extensions</groupId>
+            <artifactId>dubbo-mock-api</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+        </dependency>
+
+        <!-- the mysql db driver need user put it in /opt-libs path -->
+<!--        <dependency>-->
+<!--            <groupId>mysql</groupId>-->
+<!--            <artifactId>mysql-connector-java</artifactId>-->
+<!--            <version>5.1.49</version>-->
+<!--            <scope>provided</scope>-->
+<!--        </dependency>-->
+
+        <dependency>
+            <groupId>com.h2database</groupId>
+            <artifactId>h2</artifactId>
+            <scope>runtime</scope>
+        </dependency>
     </dependencies>
 
     <build>
@@ -212,6 +236,9 @@
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
                 <version>2.0.2.RELEASE</version>
+                <configuration>
+                    <layout>ZIP</layout>
+                </configuration>
                 <executions>
                     <execution>
                         <phase>package</phase>
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/DubboAdminApplication.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/DubboAdminApplication.java
index 4f73eae..0be95b4 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/DubboAdminApplication.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/DubboAdminApplication.java
@@ -17,14 +17,17 @@
 
 package org.apache.dubbo.admin;
 
+import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
+import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
 import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
 
 @SpringBootApplication(exclude={
-		DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class
+		HibernateJpaAutoConfiguration.class
 })
+@EnableDubbo(scanBasePackages = {"org.apache.dubbo.admin.provider"})
+@MapperScan(basePackages = {"org.apache.dubbo.admin.mapper"})
 public class DubboAdminApplication {
 
 	public static void main(String[] args) {
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java
index e2c3e3e..2ca8958 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java
@@ -17,8 +17,6 @@
 
 package org.apache.dubbo.admin.config;
 
-import org.apache.commons.lang3.StringUtils;
-
 import org.apache.dubbo.admin.common.exception.ConfigurationException;
 import org.apache.dubbo.admin.common.util.Constants;
 import org.apache.dubbo.admin.registry.config.GovernanceConfiguration;
@@ -28,8 +26,9 @@
 import org.apache.dubbo.admin.registry.metadata.MetaDataCollector;
 import org.apache.dubbo.admin.registry.metadata.impl.NoOpMetadataCollector;
 import org.apache.dubbo.admin.service.impl.InstanceRegistryCache;
+
+import org.apache.commons.lang3.StringUtils;
 import org.apache.dubbo.common.URL;
-import org.apache.dubbo.common.config.Environment;
 import org.apache.dubbo.common.extension.ExtensionLoader;
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
@@ -39,18 +38,12 @@
 import org.apache.dubbo.registry.RegistryService;
 import org.apache.dubbo.registry.client.ServiceDiscovery;
 import org.apache.dubbo.registry.client.ServiceDiscoveryFactory;
-import org.apache.dubbo.rpc.model.ApplicationModel;
-
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.DependsOn;
 
 import java.util.Arrays;
-import java.util.Collections;
-import java.util.Map;
-import java.util.SortedMap;
-import java.util.TreeMap;
 
 import static org.apache.dubbo.common.constants.CommonConstants.CLUSTER_KEY;
 import static org.apache.dubbo.registry.client.ServiceDiscoveryFactory.getExtension;
@@ -138,38 +131,9 @@
                 //throw exception
             }
         }
-        initDubboEnvironment();
         return dynamicConfiguration;
     }
 
-    private void initDubboEnvironment() {
-        Environment env = ApplicationModel.getEnvironment();
-        SortedMap<String, String> sortedMap = new TreeMap<>();
-        if (registryUrl == null) {
-            if (StringUtils.isNotBlank(registryAddress)) {
-                registryUrl = formUrl(registryAddress, registryGroup, registryNameSpace, username, password);
-            }
-        }
-
-        if (metadataUrl == null) {
-            if (StringUtils.isNotEmpty(metadataAddress)) {
-                metadataUrl = formUrl(metadataAddress, metadataGroup, metadataGroupNameSpace, username, password);
-                metadataUrl = metadataUrl.addParameter(CLUSTER_KEY, cluster);
-            }
-        }
-        if (registryUrl != null) {
-            sortedMap.put("dubbo.registry.address", registryUrl.toFullString());
-        }
-        if (configCenterUrl != null) {
-            sortedMap.put("dubbo.config-center.address", configCenterUrl.toFullString());
-        }
-        if (metadataUrl != null) {
-            sortedMap.put("dubbo.metadata-report.address", metadataUrl.toFullString());
-        }
-        Map<String, String> map = Collections.unmodifiableSortedMap(sortedMap);
-        env.updateAppConfigMap(map);
-    }
-
     /*
      * generate registry client
      */
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/MockRuleController.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/MockRuleController.java
new file mode 100644
index 0000000..435e651
--- /dev/null
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/MockRuleController.java
@@ -0,0 +1,62 @@
+/*
+ * 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.dubbo.admin.controller;
+
+import org.apache.dubbo.admin.annotation.Authority;
+import org.apache.dubbo.admin.model.dto.MockRuleDTO;
+import org.apache.dubbo.admin.service.MockRuleService;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * Mock Rule Controller.
+ */
+@Authority(needLogin = true)
+@RestController
+@RequestMapping("/api/{env}/mock/rule")
+public class MockRuleController {
+
+    @Autowired
+    private MockRuleService mockRuleService;
+
+    @PostMapping
+    public boolean createOrUpdateMockRule(@RequestBody MockRuleDTO mockRule) {
+        mockRuleService.createOrUpdateMockRule(mockRule);
+        return true;
+    }
+
+    @DeleteMapping
+    public boolean deleteMockRule(@RequestBody MockRuleDTO mockRule) {
+        mockRuleService.deleteMockRuleById(mockRule.getId());
+        return true;
+    }
+
+    @GetMapping("/list")
+    public Page<MockRuleDTO> listMockRules(@RequestParam(required = false) String filter, Pageable pageable) {
+        return mockRuleService.listMockRulesByPage(filter, pageable);
+    }
+}
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/mapper/MockRuleMapper.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/mapper/MockRuleMapper.java
new file mode 100644
index 0000000..1b670ca
--- /dev/null
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/mapper/MockRuleMapper.java
@@ -0,0 +1,28 @@
+/*
+ * 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.dubbo.admin.mapper;
+
+import org.apache.dubbo.admin.model.domain.MockRule;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * The database operator of mock rule.
+ */
+public interface MockRuleMapper extends BaseMapper<MockRule> {
+}
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/model/domain/MockRule.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/model/domain/MockRule.java
new file mode 100644
index 0000000..4ed3634
--- /dev/null
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/model/domain/MockRule.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.dubbo.admin.model.domain;
+
+import org.apache.dubbo.admin.model.dto.MockRuleDTO;
+
+/**
+ * The entity for database query and insert.
+ */
+public class MockRule {
+
+    private Long id;
+
+    private String serviceName;
+
+    private String methodName;
+
+    private String rule;
+
+    private Boolean enable;
+
+    public String getServiceName() {
+        return serviceName;
+    }
+
+    public void setServiceName(String serviceName) {
+        this.serviceName = serviceName;
+    }
+
+    public String getMethodName() {
+        return methodName;
+    }
+
+    public void setMethodName(String methodName) {
+        this.methodName = methodName;
+    }
+
+    public String getRule() {
+        return rule;
+    }
+
+    public void setRule(String rule) {
+        this.rule = rule;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Boolean getEnable() {
+        return enable;
+    }
+
+    public void setEnable(Boolean enable) {
+        this.enable = enable;
+    }
+
+    @java.lang.Override
+    public String toString() {
+        return "MockRule{" +
+                "id=" + id +
+                ", serviceName='" + serviceName + '\'' +
+                ", methodName='" + methodName + '\'' +
+                ", rule='" + rule + '\'' +
+                ", enable=" + enable +
+                '}';
+    }
+
+
+    public static MockRule toMockRule(MockRuleDTO mockRule) {
+        MockRule rule = new MockRule();
+        rule.setServiceName(mockRule.getServiceName().trim());
+        rule.setMethodName(mockRule.getMethodName().trim());
+        rule.setId(mockRule.getId());
+        rule.setRule(mockRule.getRule());
+        rule.setEnable(mockRule.getEnable());
+        return rule;
+    }
+}
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/model/dto/MockRuleDTO.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/model/dto/MockRuleDTO.java
new file mode 100644
index 0000000..d808cdf
--- /dev/null
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/model/dto/MockRuleDTO.java
@@ -0,0 +1,95 @@
+/*
+ * 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.dubbo.admin.model.dto;
+
+import org.apache.dubbo.admin.model.domain.MockRule;
+
+import org.springframework.beans.BeanUtils;
+
+/**
+ * the dto which provide to front end.
+ */
+public class MockRuleDTO {
+
+    private Long id;
+
+    private String serviceName;
+
+    private String methodName;
+
+    private String rule;
+
+    private Boolean enable;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getRule() {
+        return rule;
+    }
+
+    public void setRule(String rule) {
+        this.rule = rule;
+    }
+
+    public String getServiceName() {
+        return serviceName;
+    }
+
+    public void setServiceName(String serviceName) {
+        this.serviceName = serviceName;
+    }
+
+    public String getMethodName() {
+        return methodName;
+    }
+
+    public void setMethodName(String methodName) {
+        this.methodName = methodName;
+    }
+
+    public Boolean getEnable() {
+        return enable;
+    }
+
+    public void setEnable(Boolean enable) {
+        this.enable = enable;
+    }
+
+    @Override
+    public String toString() {
+        return "MockRuleDTO{" +
+                "id=" + id +
+                ", serviceName='" + serviceName + '\'' +
+                ", methodName='" + methodName + '\'' +
+                ", rule='" + rule + '\'' +
+                ", enable=" + enable +
+                '}';
+    }
+
+    public static MockRuleDTO toMockRuleDTO(MockRule mockRule) {
+        MockRuleDTO mockRuleDTO = new MockRuleDTO();
+        BeanUtils.copyProperties(mockRule, mockRuleDTO);
+        return mockRuleDTO;
+    }
+}
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/provider/MockServiceProvider.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/provider/MockServiceProvider.java
new file mode 100644
index 0000000..d0bb07d
--- /dev/null
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/provider/MockServiceProvider.java
@@ -0,0 +1,41 @@
+/*
+ * 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.dubbo.admin.provider;
+
+import org.apache.dubbo.admin.service.MockRuleService;
+
+import org.apache.dubbo.config.annotation.DubboService;
+import org.apache.dubbo.mock.api.MockContext;
+import org.apache.dubbo.mock.api.MockResult;
+import org.apache.dubbo.mock.api.MockService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * The {@link MockServiceProvider} register as a dubbo service, provide the mock function for the consumer of {@link MockService}.
+ */
+@DubboService
+public class MockServiceProvider implements MockService {
+
+    @Autowired
+    private MockRuleService mockRuleService;
+
+    @Override
+    public MockResult mock(MockContext mockContext) {
+        return mockRuleService.getMockData(mockContext);
+    }
+}
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/config/impl/NacosConfiguration.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/config/impl/NacosConfiguration.java
index f5d0c7b..18e82cb 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/config/impl/NacosConfiguration.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/config/impl/NacosConfiguration.java
@@ -17,24 +17,24 @@
 
 package org.apache.dubbo.admin.registry.config.impl;
 
-import com.alibaba.nacos.api.PropertyKeyConst;
-import java.util.Map;
 import org.apache.dubbo.admin.common.util.Constants;
 import org.apache.dubbo.admin.registry.config.GovernanceConfiguration;
+
+import com.alibaba.nacos.api.NacosFactory;
+import com.alibaba.nacos.api.PropertyKeyConst;
+import com.alibaba.nacos.api.config.ConfigService;
+import com.alibaba.nacos.api.exception.NacosException;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
 import org.apache.dubbo.common.utils.StringConstantFieldValuePredicate;
 
-import com.alibaba.nacos.api.NacosFactory;
-import com.alibaba.nacos.api.config.ConfigService;
-import com.alibaba.nacos.api.exception.NacosException;
-import org.apache.commons.lang3.StringUtils;
-
+import java.util.Map;
 import java.util.Properties;
 
-import static com.alibaba.nacos.api.PropertyKeyConst.SERVER_ADDR;
 import static com.alibaba.nacos.api.PropertyKeyConst.NAMESPACE;
+import static com.alibaba.nacos.api.PropertyKeyConst.SERVER_ADDR;
 
 public class NacosConfiguration implements GovernanceConfiguration {
     private static final Logger logger = LoggerFactory.getLogger(NacosConfiguration.class);
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/MockRuleService.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/MockRuleService.java
new file mode 100644
index 0000000..2389219
--- /dev/null
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/MockRuleService.java
@@ -0,0 +1,63 @@
+/*
+ * 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.dubbo.admin.service;
+
+import org.apache.dubbo.admin.model.dto.MockRuleDTO;
+
+import org.apache.dubbo.mock.api.MockContext;
+import org.apache.dubbo.mock.api.MockResult;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+
+/**
+ * The {@link MockRuleService} mainly works on the function of response the request of mock consumer
+ * and maintain the mock rule data.
+ */
+public interface MockRuleService {
+
+    /**
+     * create or update mock rule. if the request contains id, then will be an update operation.
+     *
+     * @param mockRule mock rule.
+     */
+    void createOrUpdateMockRule(MockRuleDTO mockRule);
+
+    /**
+     * delete the mock rule data by mock rule id.
+     *
+     * @param id mock rule id.
+     */
+    void deleteMockRuleById(Long id);
+
+    /**
+     * list the mock rules by filter and return data by page.
+     *
+     * @param filter filter condition.
+     * @param pageable pageable params.
+     * @return mock rules by page.
+     */
+    Page<MockRuleDTO> listMockRulesByPage(String filter, Pageable pageable);
+
+    /**
+     * return the mock rule data by {@link MockContext}.
+     *
+     * @param mockContext mock context provide by consumer.
+     * @return mock data.
+     */
+    MockResult getMockData(MockContext mockContext);
+}
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/MockRuleServiceImpl.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/MockRuleServiceImpl.java
new file mode 100644
index 0000000..7b659d5
--- /dev/null
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/MockRuleServiceImpl.java
@@ -0,0 +1,116 @@
+/*
+ * 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.dubbo.admin.service.impl;
+
+import org.apache.dubbo.admin.mapper.MockRuleMapper;
+import org.apache.dubbo.admin.model.domain.MockRule;
+import org.apache.dubbo.admin.model.dto.MockRuleDTO;
+import org.apache.dubbo.admin.service.MockRuleService;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import org.apache.dubbo.mock.api.MockContext;
+import org.apache.dubbo.mock.api.MockResult;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.DuplicateKeyException;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+/**
+ * The implement of {@link MockRuleService}.
+ */
+@Component
+public class MockRuleServiceImpl implements MockRuleService {
+
+    @Autowired
+    private MockRuleMapper mockRuleMapper;
+
+    @Override
+    public void createOrUpdateMockRule(MockRuleDTO mockRule) {
+        if (Objects.isNull(mockRule.getServiceName()) || Objects.isNull(mockRule.getMethodName())
+                || Objects.isNull(mockRule.getRule())) {
+            throw new IllegalStateException("Param serviceName, methodName, rule cannot be null");
+        }
+        MockRule rule = MockRule.toMockRule(mockRule);
+        QueryWrapper<MockRule> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("service_name", mockRule.getServiceName());
+        queryWrapper.eq("method_name", mockRule.getMethodName());
+        MockRule existRule = mockRuleMapper.selectOne(queryWrapper);
+
+        // check if we can save or update the rule, we need keep the serviceName + methodName is unique.
+        if (Objects.nonNull(existRule)) {
+            if (Objects.equals(rule.getServiceName(), existRule.getServiceName())
+                    && Objects.equals(rule.getMethodName(), existRule.getMethodName())) {
+                if (!Objects.equals(rule.getId(), existRule.getId())) {
+                    throw new DuplicateKeyException("Service Name and Method Name must be unique");
+                }
+            }
+        }
+
+        if (Objects.nonNull(rule.getId())) {
+            mockRuleMapper.updateById(rule);
+            return;
+        }
+        mockRuleMapper.insert(rule);
+    }
+
+    @Override
+    public void deleteMockRuleById(Long id) {
+        MockRule mockRule = mockRuleMapper.selectById(id);
+        if (Objects.isNull(mockRule)) {
+            throw new IllegalStateException("Mock Rule cannot find");
+        }
+        mockRuleMapper.deleteById(id);
+    }
+
+    @Override
+    public Page<MockRuleDTO> listMockRulesByPage(String filter, Pageable pageable) {
+        QueryWrapper<MockRule> queryWrapper = new QueryWrapper<>();
+        Optional.ofNullable(filter)
+                .ifPresent(f -> queryWrapper.like("service_name", f));
+        List<MockRule> mockRules = mockRuleMapper.selectList(queryWrapper);
+        int total = mockRules.size();
+        final List<MockRuleDTO> content = mockRules.stream()
+                .skip(pageable.getOffset())
+                .limit(pageable.getPageSize())
+                .map(MockRuleDTO::toMockRuleDTO)
+                .collect(Collectors.toList());
+        return new PageImpl<>(content, pageable, total);
+    }
+
+    @Override
+    public MockResult getMockData(MockContext mockContext) {
+        QueryWrapper<MockRule> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("service_name", mockContext.getServiceName());
+        queryWrapper.eq("method_name", mockContext.getMethodName());
+        MockRule mockRule = mockRuleMapper.selectOne(queryWrapper);
+        MockResult mockResult = new MockResult();
+        if (Objects.isNull(mockRule)) {
+            return mockResult;
+        }
+        mockResult.setEnable(mockRule.getEnable());
+        mockResult.setContent(mockRule.getRule());
+        return mockResult;
+    }
+}
diff --git a/dubbo-admin-server/src/main/resources/application.properties b/dubbo-admin-server/src/main/resources/application.properties
index da49bf2..4aa924b 100644
--- a/dubbo-admin-server/src/main/resources/application.properties
+++ b/dubbo-admin-server/src/main/resources/application.properties
@@ -61,3 +61,21 @@
 admin.check.tokenTimeoutMilli=3600000
 #Jwt signingKey
 admin.check.signSecret=86295dd0c4ef69a1036b0b0c15158d77
+
+#dubbo config
+dubbo.application.name=dubbo-admin
+dubbo.registry.address=${admin.registry.address}
+
+# mysql
+#spring.datasource.driver-class-name=com.mysql.jdbc.Driver
+#spring.datasource.url=jdbc:mysql://localhost:3306/dubbo-admin?characterEncoding=utf8&connectTimeout=1000&socketTimeout=10000&autoReconnect=true
+#spring.datasource.username=root
+#spring.datasource.password=mysql
+
+# h2
+spring.datasource.url=jdbc:h2:mem:~/dubbo-admin;
+spring.datasource.username=sa
+spring.datasource.password=
+
+# id generate type
+mybatis-plus.global-config.db-config.id-type=none
\ No newline at end of file
diff --git a/dubbo-admin-server/src/main/resources/schema.sql b/dubbo-admin-server/src/main/resources/schema.sql
new file mode 100644
index 0000000..f738db7
--- /dev/null
+++ b/dubbo-admin-server/src/main/resources/schema.sql
@@ -0,0 +1,27 @@
+/*
+ * 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.
+ */
+
+CREATE TABLE IF NOT EXISTS `mock_rule` (
+    `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
+    `service_name` varchar(255) DEFAULT NULL COMMENT '服务名',
+    `method_name` varchar(255) DEFAULT NULL COMMENT '方法名',
+    `rule` text COMMENT '规则',
+    `enable` tinyint(1) NOT NULL DEFAULT '1',
+    `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+    `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+    PRIMARY KEY (`id`)
+);
\ No newline at end of file
diff --git a/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/AbstractSpringIntegrationTest.java b/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/AbstractSpringIntegrationTest.java
index 0626da2..01bed98 100644
--- a/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/AbstractSpringIntegrationTest.java
+++ b/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/AbstractSpringIntegrationTest.java
@@ -76,6 +76,8 @@
                     "admin.metadata-report.address=zookeeper://" + zkServer.getConnectString());
             TestPropertySourceUtils.addInlinedPropertiesToEnvironment(configurableApplicationContext,
                     "admin.config-center=zookeeper://" + zkServer.getConnectString());
+            TestPropertySourceUtils.addInlinedPropertiesToEnvironment(configurableApplicationContext,
+                    "dubbo.config.ignore-duplicated-interface=true");
         }
     }
 }
diff --git a/dubbo-admin-ui/src/api/menu.js b/dubbo-admin-ui/src/api/menu.js
index a68f536..1f9cfe0 100644
--- a/dubbo-admin-ui/src/api/menu.js
+++ b/dubbo-admin-ui/src/api/menu.js
@@ -33,7 +33,13 @@
   },
   { title: 'serviceTest', path: '/test', icon: 'code' },
   { title: 'apiDocs', path: '/apiDocs', icon: 'code' },
-  { title: 'serviceMock', path: '/mock', icon: 'build', badge: 'feature' },
+  { title: 'serviceMock',
+    path: '/mock',
+    icon: 'build',
+    items: [
+      { title: 'mockRule', path: '/mock/rule', badge: 'new' }
+    ]
+  },
   {
     title: 'serviceMetrics',
     path: 'metrics',
diff --git a/dubbo-admin-ui/src/components/test/ServiceMock.vue b/dubbo-admin-ui/src/components/test/ServiceMock.vue
index cf3c2fd..1708774 100644
--- a/dubbo-admin-ui/src/components/test/ServiceMock.vue
+++ b/dubbo-admin-ui/src/components/test/ServiceMock.vue
@@ -16,30 +16,301 @@
   -->
 
 <template>
-  <v-container
-    fill-height
-  >
-    <v-layout align-center>
-      <v-flex text-xs-center>
-        <h1 class="display-2 primary--text">{{$t('later.serviceMock')}}</h1>
-        <v-btn
-          href="#/service"
-          color="primary"
-          outline
-        >
-          {{$t('goIndex')}}
-        </v-btn>
+  <v-container grid-list-xl fluid>
+    <v-layout row wrap>
+      <v-flex lg12>
+        <breadcrumb title="serviceMock" :items="breads"></breadcrumb>
+      </v-flex>
+      <v-flex lg12>
+        <v-card flat color="transparent">
+          <v-card-text>
+            <v-form>
+              <v-layout row wrap>
+                <v-combobox
+                  id="mockRule"
+                  :loading="searchLoading"
+                  :search-input.sync="input"
+                  v-model="filter"
+                  flat
+                  append-icon=""
+                  hide-no-data
+                  :hint="$t('testModule.searchServiceHint')"
+                  :label="$t('placeholders.searchService')"
+                  @update:searchInput="updateFilter"
+                  @keyup.enter="submitSearch"
+                ></v-combobox>
+                <v-btn @click="submitSearch" color="primary" large>{{ $t('search') }}</v-btn>
+              </v-layout>
+            </v-form>
+          </v-card-text>
+        </v-card>
+      </v-flex>
+      <v-flex xs12>
+        <v-card>
+          <v-toolbar flat color="transparent" class="elevation-0">
+            <v-toolbar-title><span class="headline">{{$t('ruleList')}}</span></v-toolbar-title>
+            <v-spacer></v-spacer>
+            <v-btn outline color="primary" @click.stop="openDialog" class="mb-2">{{$t('create')}}</v-btn>
+          </v-toolbar>
+          <v-card-text class="pa-0">
+            <v-data-table :headers="headers"
+                          :items="mockRules"
+                          :pagination.sync="pagination"
+                          :total-items="totalItems"
+                          :loading="loadingRules"
+                          class="elevation-1">
+              <template slot="items" slot-scope="props">
+                <td>{{ props.item.serviceName }}</td>
+                <td>
+                  <v-chip label>{{ props.item.methodName }}</v-chip>
+                </td>
+                <td>{{ props.item.rule }}
+                </td>
+                <td>
+                  <v-switch v-model="props.item.enable" inset @change="enableOrDisableMockRule(props.item)"></v-switch>
+                </td>
+                <td>
+                  <v-btn class="tiny" color="primary" @click="editMockRule(props.item)"> {{$t('edit')}} </v-btn>
+                  <v-btn class="tiny" color="error" @click="openDeleteDialog(props.item)"> {{$t('delete')}} </v-btn>
+                </td>
+              </template>
+            </v-data-table>
+          </v-card-text>
+        </v-card>
       </v-flex>
     </v-layout>
+
+    <v-dialog v-model="dialog" width="800px" persistent>
+      <v-card>
+        <v-card-title class="justify-center">
+          <span class="headline">{{dialogType === 1 ? $t('createMockRule') : $t('editMockRule')}}</span>
+        </v-card-title>
+        <v-card-text >
+          <v-text-field
+            :label="$t('serviceName')"
+            :hint="$t('dataIdClassHint')"
+            v-model="mockRule.serviceName"
+          ></v-text-field>
+
+          <v-text-field
+            :label="$t('methodName')"
+            :hint="$t('methodNameHint')"
+            v-model="mockRule.methodName"
+          ></v-text-field>
+
+          <v-subheader class="pa-0 mt-3">{{$t('ruleContent')}}</v-subheader>
+          <ace-editor v-model="mockRule.rule"></ace-editor>
+
+        </v-card-text>
+        <v-card-actions>
+          <v-spacer></v-spacer>
+          <v-btn flat @click.native="closeDialog">{{$t('close')}}</v-btn>
+          <v-btn depressed color="primary" @click.native="saveOrUpdateMockRule">{{$t('save')}}</v-btn>
+        </v-card-actions>
+      </v-card>
+    </v-dialog>
+
+    <v-dialog v-model="warnDialog" persistent max-width="500px">
+      <v-card>
+        <v-card-title class="headline">{{$t('deleteRuleTitle')}}</v-card-title>
+        <v-card-actions>
+          <v-spacer></v-spacer>
+          <v-btn color="darken-1" flat @click.native="closeDeleteDialog">{{$t('cancel')}}</v-btn>
+          <v-btn color="primary darken-1" depressed @click.native="deleteMockRule">{{$t('confirm')}}</v-btn>
+        </v-card-actions>
+      </v-card>
+    </v-dialog>
   </v-container>
 </template>
 
 <script>
+  import JsonEditor from '@/components/public/JsonEditor'
+  import Search from '@/components/public/Search'
+  import Breadcrumb from '@/components/public/Breadcrumb'
+  import yaml from 'js-yaml'
+  import AceEditor from '@/components/public/AceEditor'
+
   export default {
-    name: 'ServiceMock'
+    name: 'ServiceMock',
+    components: {
+      JsonEditor,
+      Search,
+      Breadcrumb,
+      yaml,
+      AceEditor
+    },
+    data() {
+      return {
+        headers: [],
+        mockRules: [],
+        breads: [
+          {
+            text: 'mockRule',
+            href: '/mock'
+          }
+        ],
+        pagination: {
+          page: 1,
+          rowsPerPage: 10 // -1 for All
+        },
+        loadingRules: false,
+        searchLoading: false,
+        filter: null,
+        totalItems: 0,
+        dialog: false,
+        mockRule: {
+          serviceName: '',
+          methodName: '',
+          rule: '',
+          enable: true
+        },
+        dialogType: 1,
+        warnDialog: false,
+        deleteRule: null
+      }
+    },
+    methods: {
+      setHeaders() {
+        this.headers = [
+          {
+            text: this.$t('serviceName'),
+            value: 'serviceName',
+            sortable: false
+          },
+          {
+            text: this.$t('methodName'),
+            value: 'methodName',
+            sortable: false
+          },
+          {
+            text: this.$t('mockData'),
+            value: 'rule',
+            sortable: false
+          },
+          {
+            text: this.$t('enabled'),
+            value: 'enable',
+            sortable: false
+          },
+          {
+            text: this.$t('operation'),
+            value: 'operation',
+            sortable: false
+          }
+        ]
+      },
+      listMockRules(filter) {
+        const page = this.pagination.page - 1;
+        const size = this.pagination.rowsPerPage === -1 ? this.totalItems : this.pagination.rowsPerPage;
+        this.loadingRules = true;
+        this.$axios.get('/mock/rule/list', {
+          params: {
+            page,
+            size,
+            filter
+          }
+        }).then(res => {
+          this.mockRules = res.data.content;
+          this.totalItems = res.data.totalElements
+        }).catch(e => {
+          this.showSnackbar('error', e.response.data.message)
+        }).finally(() => this.loadingRules = false)
+      },
+      submitSearch() {
+        this.listMockRules(this.filter)
+      },
+      openDialog() {
+        this.dialog = true
+      },
+      closeDialog() {
+        this.dialog = false;
+        this.dialogType = 1;
+        this.mockRule = {
+          serviceName: '',
+          methodName: '',
+          rule: '',
+          enable: true
+        }
+      },
+      saveOrUpdateMockRule() {
+        this.$axios.post("/mock/rule", this.mockRule).then(res => {
+          this.$notify(this.$t('saveRuleSuccess'), 'success');
+          this.closeDialog();
+          this.listMockRules()
+        }).catch(e => this.showSnackbar('error', e.response.data.message))
+      },
+      deleteMockRule() {
+        const id = this.deleteRule.id
+        this.$axios.delete('/mock/rule', {
+          data: {id}}
+          ).then(res => {
+            this.$notify(this.$t('deleteRuleSuccess'), 'success');
+            this.closeDeleteDialog()
+            this.listMockRules(this.filter)
+        })
+        .catch(e => this.$notify(e.response.data.message, 'error'))
+      },
+      editMockRule(mockRule) {
+        this.mockRule = mockRule;
+        this.openDialog();
+        this.dialogType = 2
+      },
+      enableOrDisableMockRule(mockRule) {
+        this.$axios.post('/mock/rule', mockRule)
+        .then(res => this.$notify(mockRule.enable ? this.$t('enableRuleSuccess') : this.$t('disableRuleSuccess'), 'success'))
+        .catch(e => this.$notify(e.data.response.message, 'error'))
+      },
+      updateFilter() {
+        this.filter = document.querySelector('#mockRule').value.trim();
+      },
+      closeDeleteDialog() {
+        this.warnDialog = false
+        this.deleteRule = null
+      },
+      openDeleteDialog(rule) {
+        this.warnDialog = true
+        this.deleteRule = rule
+      }
+    },
+    mounted() {
+      this.setHeaders();
+      this.listMockRules(this.filter);
+    },
+    computed: {
+      area () {
+        return this.$i18n.locale
+      }
+    },
+    watch: {
+      input (val) {
+        this.querySelections(val)
+      },
+      area () {
+        this.setHeaders()
+      },
+      pagination: {
+        handler (newVal, oldVal) {
+          if (newVal.page === oldVal.page && newVal.rowsPerPage === oldVal.rowsPerPage) {
+            return
+          }
+          const filter = this.filter;
+          this.listMockRules(filter)
+        },
+        deep: true
+      }
+    }
   }
 </script>
 
 <style scoped>
 
+  .tiny {
+    min-width: 30px;
+    height: 20px;
+    font-size: 8px;
+  }
+
+  .tiny-icon {
+    font-size: 18px;
+  }
 </style>
diff --git a/dubbo-admin-ui/src/lang/en.js b/dubbo-admin-ui/src/lang/en.js
index f047218..c84fd7a 100644
--- a/dubbo-admin-ui/src/lang/en.js
+++ b/dubbo-admin-ui/src/lang/en.js
@@ -206,5 +206,19 @@
       none: 'none'
     }
   },
-  authFailed: 'Authorized failed,please login.'
+  authFailed: 'Authorized failed,please login.',
+
+  ruleList: 'Rule List',
+  mockRule: 'Mock Rule',
+  mockData: 'Mock Data',
+  globalDisable: 'Global Disable',
+  globalEnable: 'Global Enable',
+  saveRuleSuccess: 'Save Rule Successfully',
+  deleteRuleSuccess: 'Delete Rule Successfully',
+  disableRuleSuccess: 'Disable Rule Successfully',
+  enableRuleSuccess: 'Enable Rule Successfully',
+  methodNameHint: 'The method name of Service',
+  createMockRule: 'Create Mock Rule',
+  editMockRule: 'Edit Mock Rule',
+  deleteRuleTitle: 'Are you sure to delete this mock rule?'
 }
diff --git a/dubbo-admin-ui/src/lang/zh.js b/dubbo-admin-ui/src/lang/zh.js
index 084a129..fa979c4 100644
--- a/dubbo-admin-ui/src/lang/zh.js
+++ b/dubbo-admin-ui/src/lang/zh.js
@@ -206,5 +206,19 @@
       none: '无'
     }
   },
-  authFailed: '权限验证失败'
+  authFailed: '权限验证失败',
+
+  ruleList: '规则列表',
+  mockRule: '规则配置',
+  mockData: '模拟数据',
+  globalDisable: '全局禁用',
+  globalEnable: '全局启用',
+  saveRuleSuccess: '保存规则成功',
+  deleteRuleSuccess: '删除成功',
+  disableRuleSuccess: '禁用成功',
+  enableRuleSuccess: '启用成功',
+  methodNameHint: '服务方法名',
+  createMockRule: '创建规则',
+  editMockRule: '修改规则',
+  deleteRuleTitle: '确定要删除此服务Mock规则吗？'
 }
diff --git a/dubbo-admin-ui/src/router/index.js b/dubbo-admin-ui/src/router/index.js
index 6343d34..8cb9574 100644
--- a/dubbo-admin-ui/src/router/index.js
+++ b/dubbo-admin-ui/src/router/index.js
@@ -137,7 +137,7 @@
           }
         },
         {
-          path: '/mock',
+          path: '/mock/rule',
           name: 'ServiceMock',
           component: ServiceMock,
           meta: {
diff --git a/pom.xml b/pom.xml
index 573085b..c9ec158 100644
--- a/pom.xml
+++ b/pom.xml
@@ -62,6 +62,9 @@
 		<jacoco-version>0.8.2</jacoco-version>
 		<apollo-version>1.2.0</apollo-version>
 		<guava-version>20.0</guava-version>
+		<dubbo-mock-version>3.0.0</dubbo-mock-version>
+		<mybatis-plus-boot-version>3.4.2</mybatis-plus-boot-version>
+
 		<maven-checkstyle-plugin-version>3.0.0</maven-checkstyle-plugin-version>
 		<spring-boot-version>2.3.12.RELEASE</spring-boot-version>
 		<maven_compiler_version>3.6.0</maven_compiler_version>
@@ -127,6 +130,19 @@
 				<artifactId>guava</artifactId>
 				<version>${guava-version}</version>
 			</dependency>
+
+			<dependency>
+				<groupId>org.apache.dubbo.extensions</groupId>
+				<artifactId>dubbo-mock-api</artifactId>
+				<version>${dubbo-mock-version}</version>
+			</dependency>
+
+			<dependency>
+				<groupId>com.baomidou</groupId>
+				<artifactId>mybatis-plus-boot-starter</artifactId>
+				<version>${mybatis-plus-boot-version}</version>
+			</dependency>
+
 		</dependencies>
 	</dependencyManagement>
 
