Add benchmark module
diff --git a/benchmarks/remoting-benchmark/pom.xml b/benchmarks/remoting-benchmark/pom.xml
new file mode 100644
index 0000000..e103ae8
--- /dev/null
+++ b/benchmarks/remoting-benchmark/pom.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>rocketmq-x</artifactId>
+        <groupId>org.apache.rocketmq</groupId>
+        <version>0.1.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>remoting-benchmark</artifactId>
+    <dependencies>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>remoting-impl</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/benchmarks/remoting-benchmark/src/main/java/org/apache/rocketmq/benchmarks/remoting/AbstractBenchmark.java b/benchmarks/remoting-benchmark/src/main/java/org/apache/rocketmq/benchmarks/remoting/AbstractBenchmark.java
new file mode 100644
index 0000000..b3754e9
--- /dev/null
+++ b/benchmarks/remoting-benchmark/src/main/java/org/apache/rocketmq/benchmarks/remoting/AbstractBenchmark.java
@@ -0,0 +1,78 @@
+/*
+ * 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.rocketmq.benchmarks.remoting;
+
+import org.apache.rocketmq.remoting.RemotingBootstrapFactory;
+import org.apache.rocketmq.remoting.api.RemotingClient;
+import org.apache.rocketmq.remoting.api.RemotingServer;
+import org.apache.rocketmq.remoting.api.command.RemotingCommand;
+import org.apache.rocketmq.remoting.config.RemotingConfig;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class AbstractBenchmark {
+    protected static final Logger LOG = LoggerFactory.getLogger(AbstractBenchmark.class);
+
+    /**
+     * Standard message sizes.
+     */
+    public enum MessageSize {
+        SMALL(16), MEDIUM(1024), LARGE(65536), JUMBO(1048576);
+
+        private final int bytes;
+        MessageSize(int bytes) {
+            this.bytes = bytes;
+        }
+
+        public int bytes() {
+            return bytes;
+        }
+    }
+
+    /**
+     * Support channel types.
+     */
+    public enum ChannelType {
+        NIO, LOCAL;
+    }
+
+    public static void main(String[] args) throws InterruptedException {
+        RemotingServer server = RemotingBootstrapFactory.createRemotingServer(new RemotingConfig());
+
+        server.registerRequestProcessor((short) 1, (channel, request) -> {
+            RemotingCommand response = server.commandFactory().createResponse(request);
+            response.payload("zhouxinyu".getBytes());
+            System.out.println(new String(request.payload()));
+            return response;
+        });
+        server.start();
+
+        RemotingClient client = RemotingBootstrapFactory.createRemotingClient(new RemotingConfig());
+        client.start();
+
+        RemotingCommand request = client.commandFactory().createRequest();
+        request.cmdCode((short) 1);
+        request.cmdVersion((short) 1);
+        request.payload("hello".getBytes());
+        RemotingCommand response = client.invoke("127.0.0.1:8888", request, 3000);
+        System.out.println(new String(response.payload()));
+
+        client.stop();
+        server.stop();
+    }
+}
diff --git a/pom.xml b/pom.xml
index 4995eca..2055a40 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,6 +24,7 @@
     <modules>
         <module>remoting-core/remoting-api</module>
         <module>remoting-core/remoting-impl</module>
+        <module>benchmarks/remoting-benchmark</module>
     </modules>
 
     <dependencies>
@@ -55,6 +56,11 @@
                 <version>${project.version}</version>
             </dependency>
             <dependency>
+                <groupId>${project.groupId}</groupId>
+                <artifactId>remoting-impl</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
                 <groupId>io.netty</groupId>
                 <artifactId>netty-all</artifactId>
                 <version>4.1.26.Final</version>