add grpc、pb benchmark
diff --git a/benchmark-base/build/generated/source/proto/main/java/org/apache/dubbo/benchmark/bean/DubboUserServiceGrpc.java b/benchmark-base/build/generated/source/proto/main/java/org/apache/dubbo/benchmark/bean/DubboUserServiceGrpc.java
new file mode 100644
index 0000000..02228a1
--- /dev/null
+++ b/benchmark-base/build/generated/source/proto/main/java/org/apache/dubbo/benchmark/bean/DubboUserServiceGrpc.java
@@ -0,0 +1,324 @@
+
+    package org.apache.dubbo.benchmark.bean;
+
+import org.apache.dubbo.common.URL;
+import org.apache.dubbo.config.ReferenceConfigBase;
+
+import java.util.concurrent.TimeUnit;
+
+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_TIMEOUT;
+import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_KEY;
+
+import static org.apache.dubbo.benchmark.bean.UserServiceGrpc.getServiceDescriptor;
+import static io.grpc.stub.ServerCalls.asyncUnaryCall;
+import static io.grpc.stub.ServerCalls.asyncServerStreamingCall;
+import static io.grpc.stub.ServerCalls.asyncClientStreamingCall;
+import static io.grpc.stub.ServerCalls.asyncBidiStreamingCall;
+import static io.grpc.stub.ServerCalls.asyncUnimplementedStreamingCall;
+import static io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall;
+
+@javax.annotation.Generated(
+value = "by DubboGrpc generator",
+comments = "Source: Page.proto")
+public final class DubboUserServiceGrpc {
+private DubboUserServiceGrpc() {}
+
+public static class DubboUserServiceStub implements IUserService {
+
+protected URL url;
+protected ReferenceConfigBase<?> referenceConfig;
+
+protected UserServiceGrpc.UserServiceBlockingStub blockingStub;
+protected UserServiceGrpc.UserServiceFutureStub futureStub;
+protected UserServiceGrpc.UserServiceStub stub;
+
+public DubboUserServiceStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions, URL url, ReferenceConfigBase<?> referenceConfig) {
+this.url = url;
+this.referenceConfig = referenceConfig;
+
+blockingStub = UserServiceGrpc.newBlockingStub(channel).build(channel, callOptions);
+futureStub = UserServiceGrpc.newFutureStub(channel).build(channel, callOptions);
+stub = UserServiceGrpc.newStub(channel).build(channel, callOptions);
+}
+
+    public org.apache.dubbo.benchmark.bean.PagePB.Response existUser(org.apache.dubbo.benchmark.bean.PagePB.Request request) {
+    return blockingStub
+    .withDeadlineAfter(url.getParameter(TIMEOUT_KEY, DEFAULT_TIMEOUT), TimeUnit.MILLISECONDS)
+    .existUser(request);
+    }
+
+    public com.google.common.util.concurrent.ListenableFuture<org.apache.dubbo.benchmark.bean.PagePB.Response> existUserAsync(org.apache.dubbo.benchmark.bean.PagePB.Request request) {
+    return futureStub
+    .withDeadlineAfter(url.getParameter(TIMEOUT_KEY, DEFAULT_TIMEOUT), TimeUnit.MILLISECONDS)
+    .existUser(request);
+    }
+
+    public void existUser(org.apache.dubbo.benchmark.bean.PagePB.Request request, io.grpc.stub.StreamObserver<org.apache.dubbo.benchmark.bean.PagePB.Response> responseObserver){
+    stub
+    .withDeadlineAfter(url.getParameter(TIMEOUT_KEY, DEFAULT_TIMEOUT), TimeUnit.MILLISECONDS)
+    .existUser(request, responseObserver);
+    }
+
+    public org.apache.dubbo.benchmark.bean.PagePB.Response createUser(org.apache.dubbo.benchmark.bean.PagePB.Request request) {
+    return blockingStub
+    .withDeadlineAfter(url.getParameter(TIMEOUT_KEY, DEFAULT_TIMEOUT), TimeUnit.MILLISECONDS)
+    .createUser(request);
+    }
+
+    public com.google.common.util.concurrent.ListenableFuture<org.apache.dubbo.benchmark.bean.PagePB.Response> createUserAsync(org.apache.dubbo.benchmark.bean.PagePB.Request request) {
+    return futureStub
+    .withDeadlineAfter(url.getParameter(TIMEOUT_KEY, DEFAULT_TIMEOUT), TimeUnit.MILLISECONDS)
+    .createUser(request);
+    }
+
+    public void createUser(org.apache.dubbo.benchmark.bean.PagePB.Request request, io.grpc.stub.StreamObserver<org.apache.dubbo.benchmark.bean.PagePB.Response> responseObserver){
+    stub
+    .withDeadlineAfter(url.getParameter(TIMEOUT_KEY, DEFAULT_TIMEOUT), TimeUnit.MILLISECONDS)
+    .createUser(request, responseObserver);
+    }
+
+    public org.apache.dubbo.benchmark.bean.PagePB.Response getUser(org.apache.dubbo.benchmark.bean.PagePB.Request request) {
+    return blockingStub
+    .withDeadlineAfter(url.getParameter(TIMEOUT_KEY, DEFAULT_TIMEOUT), TimeUnit.MILLISECONDS)
+    .getUser(request);
+    }
+
+    public com.google.common.util.concurrent.ListenableFuture<org.apache.dubbo.benchmark.bean.PagePB.Response> getUserAsync(org.apache.dubbo.benchmark.bean.PagePB.Request request) {
+    return futureStub
+    .withDeadlineAfter(url.getParameter(TIMEOUT_KEY, DEFAULT_TIMEOUT), TimeUnit.MILLISECONDS)
+    .getUser(request);
+    }
+
+    public void getUser(org.apache.dubbo.benchmark.bean.PagePB.Request request, io.grpc.stub.StreamObserver<org.apache.dubbo.benchmark.bean.PagePB.Response> responseObserver){
+    stub
+    .withDeadlineAfter(url.getParameter(TIMEOUT_KEY, DEFAULT_TIMEOUT), TimeUnit.MILLISECONDS)
+    .getUser(request, responseObserver);
+    }
+
+    public org.apache.dubbo.benchmark.bean.PagePB.Response listUser(org.apache.dubbo.benchmark.bean.PagePB.Request request) {
+    return blockingStub
+    .withDeadlineAfter(url.getParameter(TIMEOUT_KEY, DEFAULT_TIMEOUT), TimeUnit.MILLISECONDS)
+    .listUser(request);
+    }
+
+    public com.google.common.util.concurrent.ListenableFuture<org.apache.dubbo.benchmark.bean.PagePB.Response> listUserAsync(org.apache.dubbo.benchmark.bean.PagePB.Request request) {
+    return futureStub
+    .withDeadlineAfter(url.getParameter(TIMEOUT_KEY, DEFAULT_TIMEOUT), TimeUnit.MILLISECONDS)
+    .listUser(request);
+    }
+
+    public void listUser(org.apache.dubbo.benchmark.bean.PagePB.Request request, io.grpc.stub.StreamObserver<org.apache.dubbo.benchmark.bean.PagePB.Response> responseObserver){
+    stub
+    .withDeadlineAfter(url.getParameter(TIMEOUT_KEY, DEFAULT_TIMEOUT), TimeUnit.MILLISECONDS)
+    .listUser(request, responseObserver);
+    }
+
+}
+
+public static DubboUserServiceStub getDubboStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions, URL url, ReferenceConfigBase<?> referenceConfig) {
+return new DubboUserServiceStub(channel, callOptions, url, referenceConfig);
+}
+
+public interface IUserService {
+    default public org.apache.dubbo.benchmark.bean.PagePB.Response existUser(org.apache.dubbo.benchmark.bean.PagePB.Request request) {
+    throw new UnsupportedOperationException("No need to override this method, extend XxxImplBase and override all methods it allows.");
+    }
+
+    default public com.google.common.util.concurrent.ListenableFuture<org.apache.dubbo.benchmark.bean.PagePB.Response> existUserAsync(org.apache.dubbo.benchmark.bean.PagePB.Request request) {
+    throw new UnsupportedOperationException("No need to override this method, extend XxxImplBase and override all methods it allows.");
+    }
+
+    public void existUser(org.apache.dubbo.benchmark.bean.PagePB.Request request, io.grpc.stub.StreamObserver<org.apache.dubbo.benchmark.bean.PagePB.Response> responseObserver);
+
+    default public org.apache.dubbo.benchmark.bean.PagePB.Response createUser(org.apache.dubbo.benchmark.bean.PagePB.Request request) {
+    throw new UnsupportedOperationException("No need to override this method, extend XxxImplBase and override all methods it allows.");
+    }
+
+    default public com.google.common.util.concurrent.ListenableFuture<org.apache.dubbo.benchmark.bean.PagePB.Response> createUserAsync(org.apache.dubbo.benchmark.bean.PagePB.Request request) {
+    throw new UnsupportedOperationException("No need to override this method, extend XxxImplBase and override all methods it allows.");
+    }
+
+    public void createUser(org.apache.dubbo.benchmark.bean.PagePB.Request request, io.grpc.stub.StreamObserver<org.apache.dubbo.benchmark.bean.PagePB.Response> responseObserver);
+
+    default public org.apache.dubbo.benchmark.bean.PagePB.Response getUser(org.apache.dubbo.benchmark.bean.PagePB.Request request) {
+    throw new UnsupportedOperationException("No need to override this method, extend XxxImplBase and override all methods it allows.");
+    }
+
+    default public com.google.common.util.concurrent.ListenableFuture<org.apache.dubbo.benchmark.bean.PagePB.Response> getUserAsync(org.apache.dubbo.benchmark.bean.PagePB.Request request) {
+    throw new UnsupportedOperationException("No need to override this method, extend XxxImplBase and override all methods it allows.");
+    }
+
+    public void getUser(org.apache.dubbo.benchmark.bean.PagePB.Request request, io.grpc.stub.StreamObserver<org.apache.dubbo.benchmark.bean.PagePB.Response> responseObserver);
+
+    default public org.apache.dubbo.benchmark.bean.PagePB.Response listUser(org.apache.dubbo.benchmark.bean.PagePB.Request request) {
+    throw new UnsupportedOperationException("No need to override this method, extend XxxImplBase and override all methods it allows.");
+    }
+
+    default public com.google.common.util.concurrent.ListenableFuture<org.apache.dubbo.benchmark.bean.PagePB.Response> listUserAsync(org.apache.dubbo.benchmark.bean.PagePB.Request request) {
+    throw new UnsupportedOperationException("No need to override this method, extend XxxImplBase and override all methods it allows.");
+    }
+
+    public void listUser(org.apache.dubbo.benchmark.bean.PagePB.Request request, io.grpc.stub.StreamObserver<org.apache.dubbo.benchmark.bean.PagePB.Response> responseObserver);
+
+}
+
+public static abstract class UserServiceImplBase implements io.grpc.BindableService, IUserService {
+
+private IUserService proxiedImpl;
+
+public final void setProxiedImpl(IUserService proxiedImpl) {
+this.proxiedImpl = proxiedImpl;
+}
+
+    @java.lang.Override
+    public final org.apache.dubbo.benchmark.bean.PagePB.Response existUser(org.apache.dubbo.benchmark.bean.PagePB.Request request) {
+    throw new UnsupportedOperationException("No need to override this method, extend XxxImplBase and override all methods it allows.");
+    }
+
+    @java.lang.Override
+    public final com.google.common.util.concurrent.ListenableFuture<org.apache.dubbo.benchmark.bean.PagePB.Response> existUserAsync(org.apache.dubbo.benchmark.bean.PagePB.Request request) {
+    throw new UnsupportedOperationException("No need to override this method, extend XxxImplBase and override all methods it allows.");
+    }
+
+    @java.lang.Override
+    public final org.apache.dubbo.benchmark.bean.PagePB.Response createUser(org.apache.dubbo.benchmark.bean.PagePB.Request request) {
+    throw new UnsupportedOperationException("No need to override this method, extend XxxImplBase and override all methods it allows.");
+    }
+
+    @java.lang.Override
+    public final com.google.common.util.concurrent.ListenableFuture<org.apache.dubbo.benchmark.bean.PagePB.Response> createUserAsync(org.apache.dubbo.benchmark.bean.PagePB.Request request) {
+    throw new UnsupportedOperationException("No need to override this method, extend XxxImplBase and override all methods it allows.");
+    }
+
+    @java.lang.Override
+    public final org.apache.dubbo.benchmark.bean.PagePB.Response getUser(org.apache.dubbo.benchmark.bean.PagePB.Request request) {
+    throw new UnsupportedOperationException("No need to override this method, extend XxxImplBase and override all methods it allows.");
+    }
+
+    @java.lang.Override
+    public final com.google.common.util.concurrent.ListenableFuture<org.apache.dubbo.benchmark.bean.PagePB.Response> getUserAsync(org.apache.dubbo.benchmark.bean.PagePB.Request request) {
+    throw new UnsupportedOperationException("No need to override this method, extend XxxImplBase and override all methods it allows.");
+    }
+
+    @java.lang.Override
+    public final org.apache.dubbo.benchmark.bean.PagePB.Response listUser(org.apache.dubbo.benchmark.bean.PagePB.Request request) {
+    throw new UnsupportedOperationException("No need to override this method, extend XxxImplBase and override all methods it allows.");
+    }
+
+    @java.lang.Override
+    public final com.google.common.util.concurrent.ListenableFuture<org.apache.dubbo.benchmark.bean.PagePB.Response> listUserAsync(org.apache.dubbo.benchmark.bean.PagePB.Request request) {
+    throw new UnsupportedOperationException("No need to override this method, extend XxxImplBase and override all methods it allows.");
+    }
+
+        public void existUser(org.apache.dubbo.benchmark.bean.PagePB.Request request,
+        io.grpc.stub.StreamObserver<org.apache.dubbo.benchmark.bean.PagePB.Response> responseObserver) {
+        asyncUnimplementedUnaryCall(org.apache.dubbo.benchmark.bean.UserServiceGrpc.getExistUserMethod(), responseObserver);
+        }
+        public void createUser(org.apache.dubbo.benchmark.bean.PagePB.Request request,
+        io.grpc.stub.StreamObserver<org.apache.dubbo.benchmark.bean.PagePB.Response> responseObserver) {
+        asyncUnimplementedUnaryCall(org.apache.dubbo.benchmark.bean.UserServiceGrpc.getCreateUserMethod(), responseObserver);
+        }
+        public void getUser(org.apache.dubbo.benchmark.bean.PagePB.Request request,
+        io.grpc.stub.StreamObserver<org.apache.dubbo.benchmark.bean.PagePB.Response> responseObserver) {
+        asyncUnimplementedUnaryCall(org.apache.dubbo.benchmark.bean.UserServiceGrpc.getGetUserMethod(), responseObserver);
+        }
+        public void listUser(org.apache.dubbo.benchmark.bean.PagePB.Request request,
+        io.grpc.stub.StreamObserver<org.apache.dubbo.benchmark.bean.PagePB.Response> responseObserver) {
+        asyncUnimplementedUnaryCall(org.apache.dubbo.benchmark.bean.UserServiceGrpc.getListUserMethod(), responseObserver);
+        }
+
+@java.lang.Override public final io.grpc.ServerServiceDefinition bindService() {
+return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
+    .addMethod(
+    org.apache.dubbo.benchmark.bean.UserServiceGrpc.getExistUserMethod(),
+    asyncUnaryCall(
+    new MethodHandlers<
+    org.apache.dubbo.benchmark.bean.PagePB.Request,
+    org.apache.dubbo.benchmark.bean.PagePB.Response>(
+    proxiedImpl, METHODID_EXIST_USER)))
+    .addMethod(
+    org.apache.dubbo.benchmark.bean.UserServiceGrpc.getCreateUserMethod(),
+    asyncUnaryCall(
+    new MethodHandlers<
+    org.apache.dubbo.benchmark.bean.PagePB.Request,
+    org.apache.dubbo.benchmark.bean.PagePB.Response>(
+    proxiedImpl, METHODID_CREATE_USER)))
+    .addMethod(
+    org.apache.dubbo.benchmark.bean.UserServiceGrpc.getGetUserMethod(),
+    asyncUnaryCall(
+    new MethodHandlers<
+    org.apache.dubbo.benchmark.bean.PagePB.Request,
+    org.apache.dubbo.benchmark.bean.PagePB.Response>(
+    proxiedImpl, METHODID_GET_USER)))
+    .addMethod(
+    org.apache.dubbo.benchmark.bean.UserServiceGrpc.getListUserMethod(),
+    asyncUnaryCall(
+    new MethodHandlers<
+    org.apache.dubbo.benchmark.bean.PagePB.Request,
+    org.apache.dubbo.benchmark.bean.PagePB.Response>(
+    proxiedImpl, METHODID_LIST_USER)))
+.build();
+}
+}
+    private static final int METHODID_EXIST_USER = 0;
+    private static final int METHODID_CREATE_USER = 1;
+    private static final int METHODID_GET_USER = 2;
+    private static final int METHODID_LIST_USER = 3;
+
+private static final class MethodHandlers
+<Req, Resp> implements
+io.grpc.stub.ServerCalls.UnaryMethod
+<Req, Resp>,
+io.grpc.stub.ServerCalls.ServerStreamingMethod
+<Req, Resp>,
+io.grpc.stub.ServerCalls.ClientStreamingMethod
+<Req, Resp>,
+io.grpc.stub.ServerCalls.BidiStreamingMethod
+<Req, Resp> {
+private final IUserService serviceImpl;
+private final int methodId;
+
+MethodHandlers(IUserService serviceImpl, int methodId) {
+this.serviceImpl = serviceImpl;
+this.methodId = methodId;
+}
+
+@java.lang.Override
+@java.lang.SuppressWarnings("unchecked")
+public void invoke(Req request, io.grpc.stub.StreamObserver
+<Resp> responseObserver) {
+    switch (methodId) {
+            case METHODID_EXIST_USER:
+            serviceImpl.existUser((org.apache.dubbo.benchmark.bean.PagePB.Request) request,
+            (io.grpc.stub.StreamObserver<org.apache.dubbo.benchmark.bean.PagePB.Response>) responseObserver);
+            break;
+            case METHODID_CREATE_USER:
+            serviceImpl.createUser((org.apache.dubbo.benchmark.bean.PagePB.Request) request,
+            (io.grpc.stub.StreamObserver<org.apache.dubbo.benchmark.bean.PagePB.Response>) responseObserver);
+            break;
+            case METHODID_GET_USER:
+            serviceImpl.getUser((org.apache.dubbo.benchmark.bean.PagePB.Request) request,
+            (io.grpc.stub.StreamObserver<org.apache.dubbo.benchmark.bean.PagePB.Response>) responseObserver);
+            break;
+            case METHODID_LIST_USER:
+            serviceImpl.listUser((org.apache.dubbo.benchmark.bean.PagePB.Request) request,
+            (io.grpc.stub.StreamObserver<org.apache.dubbo.benchmark.bean.PagePB.Response>) responseObserver);
+            break;
+    default:
+    throw new java.lang.AssertionError();
+    }
+    }
+
+    @java.lang.Override
+    @java.lang.SuppressWarnings("unchecked")
+    public io.grpc.stub.StreamObserver
+    <Req> invoke(io.grpc.stub.StreamObserver
+        <Resp> responseObserver) {
+            switch (methodId) {
+            default:
+            throw new java.lang.AssertionError();
+            }
+            }
+            }
+
+            }
diff --git a/benchmark-base/build/generated/source/proto/main/java/org/apache/dubbo/benchmark/bean/PagePB.java b/benchmark-base/build/generated/source/proto/main/java/org/apache/dubbo/benchmark/bean/PagePB.java
new file mode 100644
index 0000000..0dab799
--- /dev/null
+++ b/benchmark-base/build/generated/source/proto/main/java/org/apache/dubbo/benchmark/bean/PagePB.java
@@ -0,0 +1,4808 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: Page.proto
+
+package org.apache.dubbo.benchmark.bean;
+
+public final class PagePB {
+  private PagePB() {}
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistryLite registry) {
+  }
+
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistry registry) {
+    registerAllExtensions(
+        (com.google.protobuf.ExtensionRegistryLite) registry);
+  }
+  public interface PageOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:org.apache.dubbo.benchmark.bean.Page)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .org.apache.dubbo.benchmark.bean.User users = 1;</code>
+     */
+    java.util.List<org.apache.dubbo.benchmark.bean.PagePB.User> 
+        getUsersList();
+    /**
+     * <code>repeated .org.apache.dubbo.benchmark.bean.User users = 1;</code>
+     */
+    org.apache.dubbo.benchmark.bean.PagePB.User getUsers(int index);
+    /**
+     * <code>repeated .org.apache.dubbo.benchmark.bean.User users = 1;</code>
+     */
+    int getUsersCount();
+    /**
+     * <code>repeated .org.apache.dubbo.benchmark.bean.User users = 1;</code>
+     */
+    java.util.List<? extends org.apache.dubbo.benchmark.bean.PagePB.UserOrBuilder> 
+        getUsersOrBuilderList();
+    /**
+     * <code>repeated .org.apache.dubbo.benchmark.bean.User users = 1;</code>
+     */
+    org.apache.dubbo.benchmark.bean.PagePB.UserOrBuilder getUsersOrBuilder(
+        int index);
+
+    /**
+     * <code>int32 pageNo = 2;</code>
+     */
+    int getPageNo();
+
+    /**
+     * <code>int32 total = 3;</code>
+     */
+    int getTotal();
+  }
+  /**
+   * <pre>
+   *### 编译只会生成message,service生成需要借助grpc这样的插件
+   * </pre>
+   *
+   * Protobuf type {@code org.apache.dubbo.benchmark.bean.Page}
+   */
+  public  static final class Page extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:org.apache.dubbo.benchmark.bean.Page)
+      PageOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Page.newBuilder() to construct.
+    private Page(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Page() {
+      users_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Page(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                users_ = new java.util.ArrayList<org.apache.dubbo.benchmark.bean.PagePB.User>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              users_.add(
+                  input.readMessage(org.apache.dubbo.benchmark.bean.PagePB.User.parser(), extensionRegistry));
+              break;
+            }
+            case 16: {
+
+              pageNo_ = input.readInt32();
+              break;
+            }
+            case 24: {
+
+              total_ = input.readInt32();
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          users_ = java.util.Collections.unmodifiableList(users_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return org.apache.dubbo.benchmark.bean.PagePB.internal_static_org_apache_dubbo_benchmark_bean_Page_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return org.apache.dubbo.benchmark.bean.PagePB.internal_static_org_apache_dubbo_benchmark_bean_Page_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              org.apache.dubbo.benchmark.bean.PagePB.Page.class, org.apache.dubbo.benchmark.bean.PagePB.Page.Builder.class);
+    }
+
+    private int bitField0_;
+    public static final int USERS_FIELD_NUMBER = 1;
+    private java.util.List<org.apache.dubbo.benchmark.bean.PagePB.User> users_;
+    /**
+     * <code>repeated .org.apache.dubbo.benchmark.bean.User users = 1;</code>
+     */
+    public java.util.List<org.apache.dubbo.benchmark.bean.PagePB.User> getUsersList() {
+      return users_;
+    }
+    /**
+     * <code>repeated .org.apache.dubbo.benchmark.bean.User users = 1;</code>
+     */
+    public java.util.List<? extends org.apache.dubbo.benchmark.bean.PagePB.UserOrBuilder> 
+        getUsersOrBuilderList() {
+      return users_;
+    }
+    /**
+     * <code>repeated .org.apache.dubbo.benchmark.bean.User users = 1;</code>
+     */
+    public int getUsersCount() {
+      return users_.size();
+    }
+    /**
+     * <code>repeated .org.apache.dubbo.benchmark.bean.User users = 1;</code>
+     */
+    public org.apache.dubbo.benchmark.bean.PagePB.User getUsers(int index) {
+      return users_.get(index);
+    }
+    /**
+     * <code>repeated .org.apache.dubbo.benchmark.bean.User users = 1;</code>
+     */
+    public org.apache.dubbo.benchmark.bean.PagePB.UserOrBuilder getUsersOrBuilder(
+        int index) {
+      return users_.get(index);
+    }
+
+    public static final int PAGENO_FIELD_NUMBER = 2;
+    private int pageNo_;
+    /**
+     * <code>int32 pageNo = 2;</code>
+     */
+    public int getPageNo() {
+      return pageNo_;
+    }
+
+    public static final int TOTAL_FIELD_NUMBER = 3;
+    private int total_;
+    /**
+     * <code>int32 total = 3;</code>
+     */
+    public int getTotal() {
+      return total_;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < users_.size(); i++) {
+        output.writeMessage(1, users_.get(i));
+      }
+      if (pageNo_ != 0) {
+        output.writeInt32(2, pageNo_);
+      }
+      if (total_ != 0) {
+        output.writeInt32(3, total_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < users_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, users_.get(i));
+      }
+      if (pageNo_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(2, pageNo_);
+      }
+      if (total_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(3, total_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof org.apache.dubbo.benchmark.bean.PagePB.Page)) {
+        return super.equals(obj);
+      }
+      org.apache.dubbo.benchmark.bean.PagePB.Page other = (org.apache.dubbo.benchmark.bean.PagePB.Page) obj;
+
+      if (!getUsersList()
+          .equals(other.getUsersList())) return false;
+      if (getPageNo()
+          != other.getPageNo()) return false;
+      if (getTotal()
+          != other.getTotal()) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getUsersCount() > 0) {
+        hash = (37 * hash) + USERS_FIELD_NUMBER;
+        hash = (53 * hash) + getUsersList().hashCode();
+      }
+      hash = (37 * hash) + PAGENO_FIELD_NUMBER;
+      hash = (53 * hash) + getPageNo();
+      hash = (37 * hash) + TOTAL_FIELD_NUMBER;
+      hash = (53 * hash) + getTotal();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static org.apache.dubbo.benchmark.bean.PagePB.Page parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.Page parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.Page parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.Page parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.Page parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.Page parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.Page parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.Page parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.Page parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.Page parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.Page parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.Page parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(org.apache.dubbo.benchmark.bean.PagePB.Page prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     *### 编译只会生成message,service生成需要借助grpc这样的插件
+     * </pre>
+     *
+     * Protobuf type {@code org.apache.dubbo.benchmark.bean.Page}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:org.apache.dubbo.benchmark.bean.Page)
+        org.apache.dubbo.benchmark.bean.PagePB.PageOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return org.apache.dubbo.benchmark.bean.PagePB.internal_static_org_apache_dubbo_benchmark_bean_Page_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return org.apache.dubbo.benchmark.bean.PagePB.internal_static_org_apache_dubbo_benchmark_bean_Page_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                org.apache.dubbo.benchmark.bean.PagePB.Page.class, org.apache.dubbo.benchmark.bean.PagePB.Page.Builder.class);
+      }
+
+      // Construct using org.apache.dubbo.benchmark.bean.PagePB.Page.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getUsersFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (usersBuilder_ == null) {
+          users_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          usersBuilder_.clear();
+        }
+        pageNo_ = 0;
+
+        total_ = 0;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return org.apache.dubbo.benchmark.bean.PagePB.internal_static_org_apache_dubbo_benchmark_bean_Page_descriptor;
+      }
+
+      @java.lang.Override
+      public org.apache.dubbo.benchmark.bean.PagePB.Page getDefaultInstanceForType() {
+        return org.apache.dubbo.benchmark.bean.PagePB.Page.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public org.apache.dubbo.benchmark.bean.PagePB.Page build() {
+        org.apache.dubbo.benchmark.bean.PagePB.Page result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public org.apache.dubbo.benchmark.bean.PagePB.Page buildPartial() {
+        org.apache.dubbo.benchmark.bean.PagePB.Page result = new org.apache.dubbo.benchmark.bean.PagePB.Page(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (usersBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            users_ = java.util.Collections.unmodifiableList(users_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.users_ = users_;
+        } else {
+          result.users_ = usersBuilder_.build();
+        }
+        result.pageNo_ = pageNo_;
+        result.total_ = total_;
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof org.apache.dubbo.benchmark.bean.PagePB.Page) {
+          return mergeFrom((org.apache.dubbo.benchmark.bean.PagePB.Page)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(org.apache.dubbo.benchmark.bean.PagePB.Page other) {
+        if (other == org.apache.dubbo.benchmark.bean.PagePB.Page.getDefaultInstance()) return this;
+        if (usersBuilder_ == null) {
+          if (!other.users_.isEmpty()) {
+            if (users_.isEmpty()) {
+              users_ = other.users_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureUsersIsMutable();
+              users_.addAll(other.users_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.users_.isEmpty()) {
+            if (usersBuilder_.isEmpty()) {
+              usersBuilder_.dispose();
+              usersBuilder_ = null;
+              users_ = other.users_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              usersBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getUsersFieldBuilder() : null;
+            } else {
+              usersBuilder_.addAllMessages(other.users_);
+            }
+          }
+        }
+        if (other.getPageNo() != 0) {
+          setPageNo(other.getPageNo());
+        }
+        if (other.getTotal() != 0) {
+          setTotal(other.getTotal());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        org.apache.dubbo.benchmark.bean.PagePB.Page parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (org.apache.dubbo.benchmark.bean.PagePB.Page) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<org.apache.dubbo.benchmark.bean.PagePB.User> users_ =
+        java.util.Collections.emptyList();
+      private void ensureUsersIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          users_ = new java.util.ArrayList<org.apache.dubbo.benchmark.bean.PagePB.User>(users_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          org.apache.dubbo.benchmark.bean.PagePB.User, org.apache.dubbo.benchmark.bean.PagePB.User.Builder, org.apache.dubbo.benchmark.bean.PagePB.UserOrBuilder> usersBuilder_;
+
+      /**
+       * <code>repeated .org.apache.dubbo.benchmark.bean.User users = 1;</code>
+       */
+      public java.util.List<org.apache.dubbo.benchmark.bean.PagePB.User> getUsersList() {
+        if (usersBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(users_);
+        } else {
+          return usersBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .org.apache.dubbo.benchmark.bean.User users = 1;</code>
+       */
+      public int getUsersCount() {
+        if (usersBuilder_ == null) {
+          return users_.size();
+        } else {
+          return usersBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .org.apache.dubbo.benchmark.bean.User users = 1;</code>
+       */
+      public org.apache.dubbo.benchmark.bean.PagePB.User getUsers(int index) {
+        if (usersBuilder_ == null) {
+          return users_.get(index);
+        } else {
+          return usersBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .org.apache.dubbo.benchmark.bean.User users = 1;</code>
+       */
+      public Builder setUsers(
+          int index, org.apache.dubbo.benchmark.bean.PagePB.User value) {
+        if (usersBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureUsersIsMutable();
+          users_.set(index, value);
+          onChanged();
+        } else {
+          usersBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .org.apache.dubbo.benchmark.bean.User users = 1;</code>
+       */
+      public Builder setUsers(
+          int index, org.apache.dubbo.benchmark.bean.PagePB.User.Builder builderForValue) {
+        if (usersBuilder_ == null) {
+          ensureUsersIsMutable();
+          users_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          usersBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .org.apache.dubbo.benchmark.bean.User users = 1;</code>
+       */
+      public Builder addUsers(org.apache.dubbo.benchmark.bean.PagePB.User value) {
+        if (usersBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureUsersIsMutable();
+          users_.add(value);
+          onChanged();
+        } else {
+          usersBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .org.apache.dubbo.benchmark.bean.User users = 1;</code>
+       */
+      public Builder addUsers(
+          int index, org.apache.dubbo.benchmark.bean.PagePB.User value) {
+        if (usersBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureUsersIsMutable();
+          users_.add(index, value);
+          onChanged();
+        } else {
+          usersBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .org.apache.dubbo.benchmark.bean.User users = 1;</code>
+       */
+      public Builder addUsers(
+          org.apache.dubbo.benchmark.bean.PagePB.User.Builder builderForValue) {
+        if (usersBuilder_ == null) {
+          ensureUsersIsMutable();
+          users_.add(builderForValue.build());
+          onChanged();
+        } else {
+          usersBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .org.apache.dubbo.benchmark.bean.User users = 1;</code>
+       */
+      public Builder addUsers(
+          int index, org.apache.dubbo.benchmark.bean.PagePB.User.Builder builderForValue) {
+        if (usersBuilder_ == null) {
+          ensureUsersIsMutable();
+          users_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          usersBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .org.apache.dubbo.benchmark.bean.User users = 1;</code>
+       */
+      public Builder addAllUsers(
+          java.lang.Iterable<? extends org.apache.dubbo.benchmark.bean.PagePB.User> values) {
+        if (usersBuilder_ == null) {
+          ensureUsersIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, users_);
+          onChanged();
+        } else {
+          usersBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .org.apache.dubbo.benchmark.bean.User users = 1;</code>
+       */
+      public Builder clearUsers() {
+        if (usersBuilder_ == null) {
+          users_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          usersBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .org.apache.dubbo.benchmark.bean.User users = 1;</code>
+       */
+      public Builder removeUsers(int index) {
+        if (usersBuilder_ == null) {
+          ensureUsersIsMutable();
+          users_.remove(index);
+          onChanged();
+        } else {
+          usersBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .org.apache.dubbo.benchmark.bean.User users = 1;</code>
+       */
+      public org.apache.dubbo.benchmark.bean.PagePB.User.Builder getUsersBuilder(
+          int index) {
+        return getUsersFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .org.apache.dubbo.benchmark.bean.User users = 1;</code>
+       */
+      public org.apache.dubbo.benchmark.bean.PagePB.UserOrBuilder getUsersOrBuilder(
+          int index) {
+        if (usersBuilder_ == null) {
+          return users_.get(index);  } else {
+          return usersBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .org.apache.dubbo.benchmark.bean.User users = 1;</code>
+       */
+      public java.util.List<? extends org.apache.dubbo.benchmark.bean.PagePB.UserOrBuilder> 
+           getUsersOrBuilderList() {
+        if (usersBuilder_ != null) {
+          return usersBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(users_);
+        }
+      }
+      /**
+       * <code>repeated .org.apache.dubbo.benchmark.bean.User users = 1;</code>
+       */
+      public org.apache.dubbo.benchmark.bean.PagePB.User.Builder addUsersBuilder() {
+        return getUsersFieldBuilder().addBuilder(
+            org.apache.dubbo.benchmark.bean.PagePB.User.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .org.apache.dubbo.benchmark.bean.User users = 1;</code>
+       */
+      public org.apache.dubbo.benchmark.bean.PagePB.User.Builder addUsersBuilder(
+          int index) {
+        return getUsersFieldBuilder().addBuilder(
+            index, org.apache.dubbo.benchmark.bean.PagePB.User.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .org.apache.dubbo.benchmark.bean.User users = 1;</code>
+       */
+      public java.util.List<org.apache.dubbo.benchmark.bean.PagePB.User.Builder> 
+           getUsersBuilderList() {
+        return getUsersFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          org.apache.dubbo.benchmark.bean.PagePB.User, org.apache.dubbo.benchmark.bean.PagePB.User.Builder, org.apache.dubbo.benchmark.bean.PagePB.UserOrBuilder> 
+          getUsersFieldBuilder() {
+        if (usersBuilder_ == null) {
+          usersBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              org.apache.dubbo.benchmark.bean.PagePB.User, org.apache.dubbo.benchmark.bean.PagePB.User.Builder, org.apache.dubbo.benchmark.bean.PagePB.UserOrBuilder>(
+                  users_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          users_ = null;
+        }
+        return usersBuilder_;
+      }
+
+      private int pageNo_ ;
+      /**
+       * <code>int32 pageNo = 2;</code>
+       */
+      public int getPageNo() {
+        return pageNo_;
+      }
+      /**
+       * <code>int32 pageNo = 2;</code>
+       */
+      public Builder setPageNo(int value) {
+        
+        pageNo_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>int32 pageNo = 2;</code>
+       */
+      public Builder clearPageNo() {
+        
+        pageNo_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int total_ ;
+      /**
+       * <code>int32 total = 3;</code>
+       */
+      public int getTotal() {
+        return total_;
+      }
+      /**
+       * <code>int32 total = 3;</code>
+       */
+      public Builder setTotal(int value) {
+        
+        total_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>int32 total = 3;</code>
+       */
+      public Builder clearTotal() {
+        
+        total_ = 0;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:org.apache.dubbo.benchmark.bean.Page)
+    }
+
+    // @@protoc_insertion_point(class_scope:org.apache.dubbo.benchmark.bean.Page)
+    private static final org.apache.dubbo.benchmark.bean.PagePB.Page DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new org.apache.dubbo.benchmark.bean.PagePB.Page();
+    }
+
+    public static org.apache.dubbo.benchmark.bean.PagePB.Page getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Page>
+        PARSER = new com.google.protobuf.AbstractParser<Page>() {
+      @java.lang.Override
+      public Page parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Page(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Page> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Page> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public org.apache.dubbo.benchmark.bean.PagePB.Page getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface UserOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:org.apache.dubbo.benchmark.bean.User)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>int64 id = 1;</code>
+     */
+    long getId();
+
+    /**
+     * <code>string name = 2;</code>
+     */
+    java.lang.String getName();
+    /**
+     * <code>string name = 2;</code>
+     */
+    com.google.protobuf.ByteString
+        getNameBytes();
+
+    /**
+     * <code>int32 sex = 3;</code>
+     */
+    int getSex();
+
+    /**
+     * <code>.google.protobuf.Timestamp birthday = 4;</code>
+     */
+    boolean hasBirthday();
+    /**
+     * <code>.google.protobuf.Timestamp birthday = 4;</code>
+     */
+    com.google.protobuf.Timestamp getBirthday();
+    /**
+     * <code>.google.protobuf.Timestamp birthday = 4;</code>
+     */
+    com.google.protobuf.TimestampOrBuilder getBirthdayOrBuilder();
+
+    /**
+     * <code>string email = 5;</code>
+     */
+    java.lang.String getEmail();
+    /**
+     * <code>string email = 5;</code>
+     */
+    com.google.protobuf.ByteString
+        getEmailBytes();
+
+    /**
+     * <code>string mobile = 6;</code>
+     */
+    java.lang.String getMobile();
+    /**
+     * <code>string mobile = 6;</code>
+     */
+    com.google.protobuf.ByteString
+        getMobileBytes();
+
+    /**
+     * <code>string address = 7;</code>
+     */
+    java.lang.String getAddress();
+    /**
+     * <code>string address = 7;</code>
+     */
+    com.google.protobuf.ByteString
+        getAddressBytes();
+
+    /**
+     * <code>string icon = 8;</code>
+     */
+    java.lang.String getIcon();
+    /**
+     * <code>string icon = 8;</code>
+     */
+    com.google.protobuf.ByteString
+        getIconBytes();
+
+    /**
+     * <code>repeated int32 permissions = 9;</code>
+     */
+    java.util.List<java.lang.Integer> getPermissionsList();
+    /**
+     * <code>repeated int32 permissions = 9;</code>
+     */
+    int getPermissionsCount();
+    /**
+     * <code>repeated int32 permissions = 9;</code>
+     */
+    int getPermissions(int index);
+
+    /**
+     * <code>int32 status = 10;</code>
+     */
+    int getStatus();
+
+    /**
+     * <code>.google.protobuf.Timestamp createTime = 11;</code>
+     */
+    boolean hasCreateTime();
+    /**
+     * <code>.google.protobuf.Timestamp createTime = 11;</code>
+     */
+    com.google.protobuf.Timestamp getCreateTime();
+    /**
+     * <code>.google.protobuf.Timestamp createTime = 11;</code>
+     */
+    com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder();
+
+    /**
+     * <code>.google.protobuf.Timestamp updateTime = 12;</code>
+     */
+    boolean hasUpdateTime();
+    /**
+     * <code>.google.protobuf.Timestamp updateTime = 12;</code>
+     */
+    com.google.protobuf.Timestamp getUpdateTime();
+    /**
+     * <code>.google.protobuf.Timestamp updateTime = 12;</code>
+     */
+    com.google.protobuf.TimestampOrBuilder getUpdateTimeOrBuilder();
+  }
+  /**
+   * Protobuf type {@code org.apache.dubbo.benchmark.bean.User}
+   */
+  public  static final class User extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:org.apache.dubbo.benchmark.bean.User)
+      UserOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use User.newBuilder() to construct.
+    private User(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private User() {
+      name_ = "";
+      email_ = "";
+      mobile_ = "";
+      address_ = "";
+      icon_ = "";
+      permissions_ = emptyIntList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private User(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+
+              id_ = input.readInt64();
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              name_ = s;
+              break;
+            }
+            case 24: {
+
+              sex_ = input.readInt32();
+              break;
+            }
+            case 34: {
+              com.google.protobuf.Timestamp.Builder subBuilder = null;
+              if (birthday_ != null) {
+                subBuilder = birthday_.toBuilder();
+              }
+              birthday_ = input.readMessage(com.google.protobuf.Timestamp.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(birthday_);
+                birthday_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 42: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              email_ = s;
+              break;
+            }
+            case 50: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              mobile_ = s;
+              break;
+            }
+            case 58: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              address_ = s;
+              break;
+            }
+            case 66: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              icon_ = s;
+              break;
+            }
+            case 72: {
+              if (!((mutable_bitField0_ & 0x00000100) != 0)) {
+                permissions_ = newIntList();
+                mutable_bitField0_ |= 0x00000100;
+              }
+              permissions_.addInt(input.readInt32());
+              break;
+            }
+            case 74: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              if (!((mutable_bitField0_ & 0x00000100) != 0) && input.getBytesUntilLimit() > 0) {
+                permissions_ = newIntList();
+                mutable_bitField0_ |= 0x00000100;
+              }
+              while (input.getBytesUntilLimit() > 0) {
+                permissions_.addInt(input.readInt32());
+              }
+              input.popLimit(limit);
+              break;
+            }
+            case 80: {
+
+              status_ = input.readInt32();
+              break;
+            }
+            case 90: {
+              com.google.protobuf.Timestamp.Builder subBuilder = null;
+              if (createTime_ != null) {
+                subBuilder = createTime_.toBuilder();
+              }
+              createTime_ = input.readMessage(com.google.protobuf.Timestamp.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(createTime_);
+                createTime_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 98: {
+              com.google.protobuf.Timestamp.Builder subBuilder = null;
+              if (updateTime_ != null) {
+                subBuilder = updateTime_.toBuilder();
+              }
+              updateTime_ = input.readMessage(com.google.protobuf.Timestamp.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(updateTime_);
+                updateTime_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000100) != 0)) {
+          permissions_.makeImmutable(); // C
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return org.apache.dubbo.benchmark.bean.PagePB.internal_static_org_apache_dubbo_benchmark_bean_User_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return org.apache.dubbo.benchmark.bean.PagePB.internal_static_org_apache_dubbo_benchmark_bean_User_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              org.apache.dubbo.benchmark.bean.PagePB.User.class, org.apache.dubbo.benchmark.bean.PagePB.User.Builder.class);
+    }
+
+    private int bitField0_;
+    public static final int ID_FIELD_NUMBER = 1;
+    private long id_;
+    /**
+     * <code>int64 id = 1;</code>
+     */
+    public long getId() {
+      return id_;
+    }
+
+    public static final int NAME_FIELD_NUMBER = 2;
+    private volatile java.lang.Object name_;
+    /**
+     * <code>string name = 2;</code>
+     */
+    public java.lang.String getName() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        name_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string name = 2;</code>
+     */
+    public com.google.protobuf.ByteString
+        getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int SEX_FIELD_NUMBER = 3;
+    private int sex_;
+    /**
+     * <code>int32 sex = 3;</code>
+     */
+    public int getSex() {
+      return sex_;
+    }
+
+    public static final int BIRTHDAY_FIELD_NUMBER = 4;
+    private com.google.protobuf.Timestamp birthday_;
+    /**
+     * <code>.google.protobuf.Timestamp birthday = 4;</code>
+     */
+    public boolean hasBirthday() {
+      return birthday_ != null;
+    }
+    /**
+     * <code>.google.protobuf.Timestamp birthday = 4;</code>
+     */
+    public com.google.protobuf.Timestamp getBirthday() {
+      return birthday_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : birthday_;
+    }
+    /**
+     * <code>.google.protobuf.Timestamp birthday = 4;</code>
+     */
+    public com.google.protobuf.TimestampOrBuilder getBirthdayOrBuilder() {
+      return getBirthday();
+    }
+
+    public static final int EMAIL_FIELD_NUMBER = 5;
+    private volatile java.lang.Object email_;
+    /**
+     * <code>string email = 5;</code>
+     */
+    public java.lang.String getEmail() {
+      java.lang.Object ref = email_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        email_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string email = 5;</code>
+     */
+    public com.google.protobuf.ByteString
+        getEmailBytes() {
+      java.lang.Object ref = email_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        email_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int MOBILE_FIELD_NUMBER = 6;
+    private volatile java.lang.Object mobile_;
+    /**
+     * <code>string mobile = 6;</code>
+     */
+    public java.lang.String getMobile() {
+      java.lang.Object ref = mobile_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        mobile_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string mobile = 6;</code>
+     */
+    public com.google.protobuf.ByteString
+        getMobileBytes() {
+      java.lang.Object ref = mobile_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        mobile_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int ADDRESS_FIELD_NUMBER = 7;
+    private volatile java.lang.Object address_;
+    /**
+     * <code>string address = 7;</code>
+     */
+    public java.lang.String getAddress() {
+      java.lang.Object ref = address_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        address_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string address = 7;</code>
+     */
+    public com.google.protobuf.ByteString
+        getAddressBytes() {
+      java.lang.Object ref = address_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        address_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int ICON_FIELD_NUMBER = 8;
+    private volatile java.lang.Object icon_;
+    /**
+     * <code>string icon = 8;</code>
+     */
+    public java.lang.String getIcon() {
+      java.lang.Object ref = icon_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        icon_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string icon = 8;</code>
+     */
+    public com.google.protobuf.ByteString
+        getIconBytes() {
+      java.lang.Object ref = icon_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        icon_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int PERMISSIONS_FIELD_NUMBER = 9;
+    private com.google.protobuf.Internal.IntList permissions_;
+    /**
+     * <code>repeated int32 permissions = 9;</code>
+     */
+    public java.util.List<java.lang.Integer>
+        getPermissionsList() {
+      return permissions_;
+    }
+    /**
+     * <code>repeated int32 permissions = 9;</code>
+     */
+    public int getPermissionsCount() {
+      return permissions_.size();
+    }
+    /**
+     * <code>repeated int32 permissions = 9;</code>
+     */
+    public int getPermissions(int index) {
+      return permissions_.getInt(index);
+    }
+    private int permissionsMemoizedSerializedSize = -1;
+
+    public static final int STATUS_FIELD_NUMBER = 10;
+    private int status_;
+    /**
+     * <code>int32 status = 10;</code>
+     */
+    public int getStatus() {
+      return status_;
+    }
+
+    public static final int CREATETIME_FIELD_NUMBER = 11;
+    private com.google.protobuf.Timestamp createTime_;
+    /**
+     * <code>.google.protobuf.Timestamp createTime = 11;</code>
+     */
+    public boolean hasCreateTime() {
+      return createTime_ != null;
+    }
+    /**
+     * <code>.google.protobuf.Timestamp createTime = 11;</code>
+     */
+    public com.google.protobuf.Timestamp getCreateTime() {
+      return createTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : createTime_;
+    }
+    /**
+     * <code>.google.protobuf.Timestamp createTime = 11;</code>
+     */
+    public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() {
+      return getCreateTime();
+    }
+
+    public static final int UPDATETIME_FIELD_NUMBER = 12;
+    private com.google.protobuf.Timestamp updateTime_;
+    /**
+     * <code>.google.protobuf.Timestamp updateTime = 12;</code>
+     */
+    public boolean hasUpdateTime() {
+      return updateTime_ != null;
+    }
+    /**
+     * <code>.google.protobuf.Timestamp updateTime = 12;</code>
+     */
+    public com.google.protobuf.Timestamp getUpdateTime() {
+      return updateTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : updateTime_;
+    }
+    /**
+     * <code>.google.protobuf.Timestamp updateTime = 12;</code>
+     */
+    public com.google.protobuf.TimestampOrBuilder getUpdateTimeOrBuilder() {
+      return getUpdateTime();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (id_ != 0L) {
+        output.writeInt64(1, id_);
+      }
+      if (!getNameBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_);
+      }
+      if (sex_ != 0) {
+        output.writeInt32(3, sex_);
+      }
+      if (birthday_ != null) {
+        output.writeMessage(4, getBirthday());
+      }
+      if (!getEmailBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, email_);
+      }
+      if (!getMobileBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, mobile_);
+      }
+      if (!getAddressBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 7, address_);
+      }
+      if (!getIconBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 8, icon_);
+      }
+      if (getPermissionsList().size() > 0) {
+        output.writeUInt32NoTag(74);
+        output.writeUInt32NoTag(permissionsMemoizedSerializedSize);
+      }
+      for (int i = 0; i < permissions_.size(); i++) {
+        output.writeInt32NoTag(permissions_.getInt(i));
+      }
+      if (status_ != 0) {
+        output.writeInt32(10, status_);
+      }
+      if (createTime_ != null) {
+        output.writeMessage(11, getCreateTime());
+      }
+      if (updateTime_ != null) {
+        output.writeMessage(12, getUpdateTime());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (id_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(1, id_);
+      }
+      if (!getNameBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_);
+      }
+      if (sex_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(3, sex_);
+      }
+      if (birthday_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, getBirthday());
+      }
+      if (!getEmailBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, email_);
+      }
+      if (!getMobileBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, mobile_);
+      }
+      if (!getAddressBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, address_);
+      }
+      if (!getIconBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(8, icon_);
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < permissions_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(permissions_.getInt(i));
+        }
+        size += dataSize;
+        if (!getPermissionsList().isEmpty()) {
+          size += 1;
+          size += com.google.protobuf.CodedOutputStream
+              .computeInt32SizeNoTag(dataSize);
+        }
+        permissionsMemoizedSerializedSize = dataSize;
+      }
+      if (status_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(10, status_);
+      }
+      if (createTime_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(11, getCreateTime());
+      }
+      if (updateTime_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(12, getUpdateTime());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof org.apache.dubbo.benchmark.bean.PagePB.User)) {
+        return super.equals(obj);
+      }
+      org.apache.dubbo.benchmark.bean.PagePB.User other = (org.apache.dubbo.benchmark.bean.PagePB.User) obj;
+
+      if (getId()
+          != other.getId()) return false;
+      if (!getName()
+          .equals(other.getName())) return false;
+      if (getSex()
+          != other.getSex()) return false;
+      if (hasBirthday() != other.hasBirthday()) return false;
+      if (hasBirthday()) {
+        if (!getBirthday()
+            .equals(other.getBirthday())) return false;
+      }
+      if (!getEmail()
+          .equals(other.getEmail())) return false;
+      if (!getMobile()
+          .equals(other.getMobile())) return false;
+      if (!getAddress()
+          .equals(other.getAddress())) return false;
+      if (!getIcon()
+          .equals(other.getIcon())) return false;
+      if (!getPermissionsList()
+          .equals(other.getPermissionsList())) return false;
+      if (getStatus()
+          != other.getStatus()) return false;
+      if (hasCreateTime() != other.hasCreateTime()) return false;
+      if (hasCreateTime()) {
+        if (!getCreateTime()
+            .equals(other.getCreateTime())) return false;
+      }
+      if (hasUpdateTime() != other.hasUpdateTime()) return false;
+      if (hasUpdateTime()) {
+        if (!getUpdateTime()
+            .equals(other.getUpdateTime())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + ID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getId());
+      hash = (37 * hash) + NAME_FIELD_NUMBER;
+      hash = (53 * hash) + getName().hashCode();
+      hash = (37 * hash) + SEX_FIELD_NUMBER;
+      hash = (53 * hash) + getSex();
+      if (hasBirthday()) {
+        hash = (37 * hash) + BIRTHDAY_FIELD_NUMBER;
+        hash = (53 * hash) + getBirthday().hashCode();
+      }
+      hash = (37 * hash) + EMAIL_FIELD_NUMBER;
+      hash = (53 * hash) + getEmail().hashCode();
+      hash = (37 * hash) + MOBILE_FIELD_NUMBER;
+      hash = (53 * hash) + getMobile().hashCode();
+      hash = (37 * hash) + ADDRESS_FIELD_NUMBER;
+      hash = (53 * hash) + getAddress().hashCode();
+      hash = (37 * hash) + ICON_FIELD_NUMBER;
+      hash = (53 * hash) + getIcon().hashCode();
+      if (getPermissionsCount() > 0) {
+        hash = (37 * hash) + PERMISSIONS_FIELD_NUMBER;
+        hash = (53 * hash) + getPermissionsList().hashCode();
+      }
+      hash = (37 * hash) + STATUS_FIELD_NUMBER;
+      hash = (53 * hash) + getStatus();
+      if (hasCreateTime()) {
+        hash = (37 * hash) + CREATETIME_FIELD_NUMBER;
+        hash = (53 * hash) + getCreateTime().hashCode();
+      }
+      if (hasUpdateTime()) {
+        hash = (37 * hash) + UPDATETIME_FIELD_NUMBER;
+        hash = (53 * hash) + getUpdateTime().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static org.apache.dubbo.benchmark.bean.PagePB.User parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.User parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.User parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.User parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.User parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.User parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.User parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.User parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.User parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.User parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.User parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.User parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(org.apache.dubbo.benchmark.bean.PagePB.User prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code org.apache.dubbo.benchmark.bean.User}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:org.apache.dubbo.benchmark.bean.User)
+        org.apache.dubbo.benchmark.bean.PagePB.UserOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return org.apache.dubbo.benchmark.bean.PagePB.internal_static_org_apache_dubbo_benchmark_bean_User_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return org.apache.dubbo.benchmark.bean.PagePB.internal_static_org_apache_dubbo_benchmark_bean_User_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                org.apache.dubbo.benchmark.bean.PagePB.User.class, org.apache.dubbo.benchmark.bean.PagePB.User.Builder.class);
+      }
+
+      // Construct using org.apache.dubbo.benchmark.bean.PagePB.User.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        id_ = 0L;
+
+        name_ = "";
+
+        sex_ = 0;
+
+        if (birthdayBuilder_ == null) {
+          birthday_ = null;
+        } else {
+          birthday_ = null;
+          birthdayBuilder_ = null;
+        }
+        email_ = "";
+
+        mobile_ = "";
+
+        address_ = "";
+
+        icon_ = "";
+
+        permissions_ = emptyIntList();
+        bitField0_ = (bitField0_ & ~0x00000100);
+        status_ = 0;
+
+        if (createTimeBuilder_ == null) {
+          createTime_ = null;
+        } else {
+          createTime_ = null;
+          createTimeBuilder_ = null;
+        }
+        if (updateTimeBuilder_ == null) {
+          updateTime_ = null;
+        } else {
+          updateTime_ = null;
+          updateTimeBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return org.apache.dubbo.benchmark.bean.PagePB.internal_static_org_apache_dubbo_benchmark_bean_User_descriptor;
+      }
+
+      @java.lang.Override
+      public org.apache.dubbo.benchmark.bean.PagePB.User getDefaultInstanceForType() {
+        return org.apache.dubbo.benchmark.bean.PagePB.User.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public org.apache.dubbo.benchmark.bean.PagePB.User build() {
+        org.apache.dubbo.benchmark.bean.PagePB.User result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public org.apache.dubbo.benchmark.bean.PagePB.User buildPartial() {
+        org.apache.dubbo.benchmark.bean.PagePB.User result = new org.apache.dubbo.benchmark.bean.PagePB.User(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        result.id_ = id_;
+        result.name_ = name_;
+        result.sex_ = sex_;
+        if (birthdayBuilder_ == null) {
+          result.birthday_ = birthday_;
+        } else {
+          result.birthday_ = birthdayBuilder_.build();
+        }
+        result.email_ = email_;
+        result.mobile_ = mobile_;
+        result.address_ = address_;
+        result.icon_ = icon_;
+        if (((bitField0_ & 0x00000100) != 0)) {
+          permissions_.makeImmutable();
+          bitField0_ = (bitField0_ & ~0x00000100);
+        }
+        result.permissions_ = permissions_;
+        result.status_ = status_;
+        if (createTimeBuilder_ == null) {
+          result.createTime_ = createTime_;
+        } else {
+          result.createTime_ = createTimeBuilder_.build();
+        }
+        if (updateTimeBuilder_ == null) {
+          result.updateTime_ = updateTime_;
+        } else {
+          result.updateTime_ = updateTimeBuilder_.build();
+        }
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof org.apache.dubbo.benchmark.bean.PagePB.User) {
+          return mergeFrom((org.apache.dubbo.benchmark.bean.PagePB.User)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(org.apache.dubbo.benchmark.bean.PagePB.User other) {
+        if (other == org.apache.dubbo.benchmark.bean.PagePB.User.getDefaultInstance()) return this;
+        if (other.getId() != 0L) {
+          setId(other.getId());
+        }
+        if (!other.getName().isEmpty()) {
+          name_ = other.name_;
+          onChanged();
+        }
+        if (other.getSex() != 0) {
+          setSex(other.getSex());
+        }
+        if (other.hasBirthday()) {
+          mergeBirthday(other.getBirthday());
+        }
+        if (!other.getEmail().isEmpty()) {
+          email_ = other.email_;
+          onChanged();
+        }
+        if (!other.getMobile().isEmpty()) {
+          mobile_ = other.mobile_;
+          onChanged();
+        }
+        if (!other.getAddress().isEmpty()) {
+          address_ = other.address_;
+          onChanged();
+        }
+        if (!other.getIcon().isEmpty()) {
+          icon_ = other.icon_;
+          onChanged();
+        }
+        if (!other.permissions_.isEmpty()) {
+          if (permissions_.isEmpty()) {
+            permissions_ = other.permissions_;
+            bitField0_ = (bitField0_ & ~0x00000100);
+          } else {
+            ensurePermissionsIsMutable();
+            permissions_.addAll(other.permissions_);
+          }
+          onChanged();
+        }
+        if (other.getStatus() != 0) {
+          setStatus(other.getStatus());
+        }
+        if (other.hasCreateTime()) {
+          mergeCreateTime(other.getCreateTime());
+        }
+        if (other.hasUpdateTime()) {
+          mergeUpdateTime(other.getUpdateTime());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        org.apache.dubbo.benchmark.bean.PagePB.User parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (org.apache.dubbo.benchmark.bean.PagePB.User) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private long id_ ;
+      /**
+       * <code>int64 id = 1;</code>
+       */
+      public long getId() {
+        return id_;
+      }
+      /**
+       * <code>int64 id = 1;</code>
+       */
+      public Builder setId(long value) {
+        
+        id_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>int64 id = 1;</code>
+       */
+      public Builder clearId() {
+        
+        id_ = 0L;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object name_ = "";
+      /**
+       * <code>string name = 2;</code>
+       */
+      public java.lang.String getName() {
+        java.lang.Object ref = name_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          name_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string name = 2;</code>
+       */
+      public com.google.protobuf.ByteString
+          getNameBytes() {
+        java.lang.Object ref = name_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          name_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string name = 2;</code>
+       */
+      public Builder setName(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        name_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 2;</code>
+       */
+      public Builder clearName() {
+        
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 2;</code>
+       */
+      public Builder setNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        name_ = value;
+        onChanged();
+        return this;
+      }
+
+      private int sex_ ;
+      /**
+       * <code>int32 sex = 3;</code>
+       */
+      public int getSex() {
+        return sex_;
+      }
+      /**
+       * <code>int32 sex = 3;</code>
+       */
+      public Builder setSex(int value) {
+        
+        sex_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>int32 sex = 3;</code>
+       */
+      public Builder clearSex() {
+        
+        sex_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private com.google.protobuf.Timestamp birthday_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> birthdayBuilder_;
+      /**
+       * <code>.google.protobuf.Timestamp birthday = 4;</code>
+       */
+      public boolean hasBirthday() {
+        return birthdayBuilder_ != null || birthday_ != null;
+      }
+      /**
+       * <code>.google.protobuf.Timestamp birthday = 4;</code>
+       */
+      public com.google.protobuf.Timestamp getBirthday() {
+        if (birthdayBuilder_ == null) {
+          return birthday_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : birthday_;
+        } else {
+          return birthdayBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.google.protobuf.Timestamp birthday = 4;</code>
+       */
+      public Builder setBirthday(com.google.protobuf.Timestamp value) {
+        if (birthdayBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          birthday_ = value;
+          onChanged();
+        } else {
+          birthdayBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.google.protobuf.Timestamp birthday = 4;</code>
+       */
+      public Builder setBirthday(
+          com.google.protobuf.Timestamp.Builder builderForValue) {
+        if (birthdayBuilder_ == null) {
+          birthday_ = builderForValue.build();
+          onChanged();
+        } else {
+          birthdayBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.google.protobuf.Timestamp birthday = 4;</code>
+       */
+      public Builder mergeBirthday(com.google.protobuf.Timestamp value) {
+        if (birthdayBuilder_ == null) {
+          if (birthday_ != null) {
+            birthday_ =
+              com.google.protobuf.Timestamp.newBuilder(birthday_).mergeFrom(value).buildPartial();
+          } else {
+            birthday_ = value;
+          }
+          onChanged();
+        } else {
+          birthdayBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.google.protobuf.Timestamp birthday = 4;</code>
+       */
+      public Builder clearBirthday() {
+        if (birthdayBuilder_ == null) {
+          birthday_ = null;
+          onChanged();
+        } else {
+          birthday_ = null;
+          birthdayBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.google.protobuf.Timestamp birthday = 4;</code>
+       */
+      public com.google.protobuf.Timestamp.Builder getBirthdayBuilder() {
+        
+        onChanged();
+        return getBirthdayFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.google.protobuf.Timestamp birthday = 4;</code>
+       */
+      public com.google.protobuf.TimestampOrBuilder getBirthdayOrBuilder() {
+        if (birthdayBuilder_ != null) {
+          return birthdayBuilder_.getMessageOrBuilder();
+        } else {
+          return birthday_ == null ?
+              com.google.protobuf.Timestamp.getDefaultInstance() : birthday_;
+        }
+      }
+      /**
+       * <code>.google.protobuf.Timestamp birthday = 4;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> 
+          getBirthdayFieldBuilder() {
+        if (birthdayBuilder_ == null) {
+          birthdayBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>(
+                  getBirthday(),
+                  getParentForChildren(),
+                  isClean());
+          birthday_ = null;
+        }
+        return birthdayBuilder_;
+      }
+
+      private java.lang.Object email_ = "";
+      /**
+       * <code>string email = 5;</code>
+       */
+      public java.lang.String getEmail() {
+        java.lang.Object ref = email_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          email_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string email = 5;</code>
+       */
+      public com.google.protobuf.ByteString
+          getEmailBytes() {
+        java.lang.Object ref = email_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          email_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string email = 5;</code>
+       */
+      public Builder setEmail(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        email_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string email = 5;</code>
+       */
+      public Builder clearEmail() {
+        
+        email_ = getDefaultInstance().getEmail();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string email = 5;</code>
+       */
+      public Builder setEmailBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        email_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object mobile_ = "";
+      /**
+       * <code>string mobile = 6;</code>
+       */
+      public java.lang.String getMobile() {
+        java.lang.Object ref = mobile_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          mobile_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string mobile = 6;</code>
+       */
+      public com.google.protobuf.ByteString
+          getMobileBytes() {
+        java.lang.Object ref = mobile_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          mobile_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string mobile = 6;</code>
+       */
+      public Builder setMobile(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        mobile_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string mobile = 6;</code>
+       */
+      public Builder clearMobile() {
+        
+        mobile_ = getDefaultInstance().getMobile();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string mobile = 6;</code>
+       */
+      public Builder setMobileBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        mobile_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object address_ = "";
+      /**
+       * <code>string address = 7;</code>
+       */
+      public java.lang.String getAddress() {
+        java.lang.Object ref = address_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          address_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string address = 7;</code>
+       */
+      public com.google.protobuf.ByteString
+          getAddressBytes() {
+        java.lang.Object ref = address_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          address_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string address = 7;</code>
+       */
+      public Builder setAddress(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        address_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string address = 7;</code>
+       */
+      public Builder clearAddress() {
+        
+        address_ = getDefaultInstance().getAddress();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string address = 7;</code>
+       */
+      public Builder setAddressBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        address_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object icon_ = "";
+      /**
+       * <code>string icon = 8;</code>
+       */
+      public java.lang.String getIcon() {
+        java.lang.Object ref = icon_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          icon_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string icon = 8;</code>
+       */
+      public com.google.protobuf.ByteString
+          getIconBytes() {
+        java.lang.Object ref = icon_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          icon_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string icon = 8;</code>
+       */
+      public Builder setIcon(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        icon_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string icon = 8;</code>
+       */
+      public Builder clearIcon() {
+        
+        icon_ = getDefaultInstance().getIcon();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string icon = 8;</code>
+       */
+      public Builder setIconBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        icon_ = value;
+        onChanged();
+        return this;
+      }
+
+      private com.google.protobuf.Internal.IntList permissions_ = emptyIntList();
+      private void ensurePermissionsIsMutable() {
+        if (!((bitField0_ & 0x00000100) != 0)) {
+          permissions_ = mutableCopy(permissions_);
+          bitField0_ |= 0x00000100;
+         }
+      }
+      /**
+       * <code>repeated int32 permissions = 9;</code>
+       */
+      public java.util.List<java.lang.Integer>
+          getPermissionsList() {
+        return ((bitField0_ & 0x00000100) != 0) ?
+                 java.util.Collections.unmodifiableList(permissions_) : permissions_;
+      }
+      /**
+       * <code>repeated int32 permissions = 9;</code>
+       */
+      public int getPermissionsCount() {
+        return permissions_.size();
+      }
+      /**
+       * <code>repeated int32 permissions = 9;</code>
+       */
+      public int getPermissions(int index) {
+        return permissions_.getInt(index);
+      }
+      /**
+       * <code>repeated int32 permissions = 9;</code>
+       */
+      public Builder setPermissions(
+          int index, int value) {
+        ensurePermissionsIsMutable();
+        permissions_.setInt(index, value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated int32 permissions = 9;</code>
+       */
+      public Builder addPermissions(int value) {
+        ensurePermissionsIsMutable();
+        permissions_.addInt(value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated int32 permissions = 9;</code>
+       */
+      public Builder addAllPermissions(
+          java.lang.Iterable<? extends java.lang.Integer> values) {
+        ensurePermissionsIsMutable();
+        com.google.protobuf.AbstractMessageLite.Builder.addAll(
+            values, permissions_);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated int32 permissions = 9;</code>
+       */
+      public Builder clearPermissions() {
+        permissions_ = emptyIntList();
+        bitField0_ = (bitField0_ & ~0x00000100);
+        onChanged();
+        return this;
+      }
+
+      private int status_ ;
+      /**
+       * <code>int32 status = 10;</code>
+       */
+      public int getStatus() {
+        return status_;
+      }
+      /**
+       * <code>int32 status = 10;</code>
+       */
+      public Builder setStatus(int value) {
+        
+        status_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>int32 status = 10;</code>
+       */
+      public Builder clearStatus() {
+        
+        status_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private com.google.protobuf.Timestamp createTime_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> createTimeBuilder_;
+      /**
+       * <code>.google.protobuf.Timestamp createTime = 11;</code>
+       */
+      public boolean hasCreateTime() {
+        return createTimeBuilder_ != null || createTime_ != null;
+      }
+      /**
+       * <code>.google.protobuf.Timestamp createTime = 11;</code>
+       */
+      public com.google.protobuf.Timestamp getCreateTime() {
+        if (createTimeBuilder_ == null) {
+          return createTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : createTime_;
+        } else {
+          return createTimeBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.google.protobuf.Timestamp createTime = 11;</code>
+       */
+      public Builder setCreateTime(com.google.protobuf.Timestamp value) {
+        if (createTimeBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          createTime_ = value;
+          onChanged();
+        } else {
+          createTimeBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.google.protobuf.Timestamp createTime = 11;</code>
+       */
+      public Builder setCreateTime(
+          com.google.protobuf.Timestamp.Builder builderForValue) {
+        if (createTimeBuilder_ == null) {
+          createTime_ = builderForValue.build();
+          onChanged();
+        } else {
+          createTimeBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.google.protobuf.Timestamp createTime = 11;</code>
+       */
+      public Builder mergeCreateTime(com.google.protobuf.Timestamp value) {
+        if (createTimeBuilder_ == null) {
+          if (createTime_ != null) {
+            createTime_ =
+              com.google.protobuf.Timestamp.newBuilder(createTime_).mergeFrom(value).buildPartial();
+          } else {
+            createTime_ = value;
+          }
+          onChanged();
+        } else {
+          createTimeBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.google.protobuf.Timestamp createTime = 11;</code>
+       */
+      public Builder clearCreateTime() {
+        if (createTimeBuilder_ == null) {
+          createTime_ = null;
+          onChanged();
+        } else {
+          createTime_ = null;
+          createTimeBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.google.protobuf.Timestamp createTime = 11;</code>
+       */
+      public com.google.protobuf.Timestamp.Builder getCreateTimeBuilder() {
+        
+        onChanged();
+        return getCreateTimeFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.google.protobuf.Timestamp createTime = 11;</code>
+       */
+      public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() {
+        if (createTimeBuilder_ != null) {
+          return createTimeBuilder_.getMessageOrBuilder();
+        } else {
+          return createTime_ == null ?
+              com.google.protobuf.Timestamp.getDefaultInstance() : createTime_;
+        }
+      }
+      /**
+       * <code>.google.protobuf.Timestamp createTime = 11;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> 
+          getCreateTimeFieldBuilder() {
+        if (createTimeBuilder_ == null) {
+          createTimeBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>(
+                  getCreateTime(),
+                  getParentForChildren(),
+                  isClean());
+          createTime_ = null;
+        }
+        return createTimeBuilder_;
+      }
+
+      private com.google.protobuf.Timestamp updateTime_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> updateTimeBuilder_;
+      /**
+       * <code>.google.protobuf.Timestamp updateTime = 12;</code>
+       */
+      public boolean hasUpdateTime() {
+        return updateTimeBuilder_ != null || updateTime_ != null;
+      }
+      /**
+       * <code>.google.protobuf.Timestamp updateTime = 12;</code>
+       */
+      public com.google.protobuf.Timestamp getUpdateTime() {
+        if (updateTimeBuilder_ == null) {
+          return updateTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : updateTime_;
+        } else {
+          return updateTimeBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.google.protobuf.Timestamp updateTime = 12;</code>
+       */
+      public Builder setUpdateTime(com.google.protobuf.Timestamp value) {
+        if (updateTimeBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          updateTime_ = value;
+          onChanged();
+        } else {
+          updateTimeBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.google.protobuf.Timestamp updateTime = 12;</code>
+       */
+      public Builder setUpdateTime(
+          com.google.protobuf.Timestamp.Builder builderForValue) {
+        if (updateTimeBuilder_ == null) {
+          updateTime_ = builderForValue.build();
+          onChanged();
+        } else {
+          updateTimeBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.google.protobuf.Timestamp updateTime = 12;</code>
+       */
+      public Builder mergeUpdateTime(com.google.protobuf.Timestamp value) {
+        if (updateTimeBuilder_ == null) {
+          if (updateTime_ != null) {
+            updateTime_ =
+              com.google.protobuf.Timestamp.newBuilder(updateTime_).mergeFrom(value).buildPartial();
+          } else {
+            updateTime_ = value;
+          }
+          onChanged();
+        } else {
+          updateTimeBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.google.protobuf.Timestamp updateTime = 12;</code>
+       */
+      public Builder clearUpdateTime() {
+        if (updateTimeBuilder_ == null) {
+          updateTime_ = null;
+          onChanged();
+        } else {
+          updateTime_ = null;
+          updateTimeBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.google.protobuf.Timestamp updateTime = 12;</code>
+       */
+      public com.google.protobuf.Timestamp.Builder getUpdateTimeBuilder() {
+        
+        onChanged();
+        return getUpdateTimeFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.google.protobuf.Timestamp updateTime = 12;</code>
+       */
+      public com.google.protobuf.TimestampOrBuilder getUpdateTimeOrBuilder() {
+        if (updateTimeBuilder_ != null) {
+          return updateTimeBuilder_.getMessageOrBuilder();
+        } else {
+          return updateTime_ == null ?
+              com.google.protobuf.Timestamp.getDefaultInstance() : updateTime_;
+        }
+      }
+      /**
+       * <code>.google.protobuf.Timestamp updateTime = 12;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> 
+          getUpdateTimeFieldBuilder() {
+        if (updateTimeBuilder_ == null) {
+          updateTimeBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>(
+                  getUpdateTime(),
+                  getParentForChildren(),
+                  isClean());
+          updateTime_ = null;
+        }
+        return updateTimeBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:org.apache.dubbo.benchmark.bean.User)
+    }
+
+    // @@protoc_insertion_point(class_scope:org.apache.dubbo.benchmark.bean.User)
+    private static final org.apache.dubbo.benchmark.bean.PagePB.User DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new org.apache.dubbo.benchmark.bean.PagePB.User();
+    }
+
+    public static org.apache.dubbo.benchmark.bean.PagePB.User getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<User>
+        PARSER = new com.google.protobuf.AbstractParser<User>() {
+      @java.lang.Override
+      public User parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new User(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<User> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<User> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public org.apache.dubbo.benchmark.bean.PagePB.User getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface RequestOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:org.apache.dubbo.benchmark.bean.Request)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>int64 id = 1;</code>
+     */
+    long getId();
+
+    /**
+     * <code>int32 page = 2;</code>
+     */
+    int getPage();
+
+    /**
+     * <code>.org.apache.dubbo.benchmark.bean.User user = 3;</code>
+     */
+    boolean hasUser();
+    /**
+     * <code>.org.apache.dubbo.benchmark.bean.User user = 3;</code>
+     */
+    org.apache.dubbo.benchmark.bean.PagePB.User getUser();
+    /**
+     * <code>.org.apache.dubbo.benchmark.bean.User user = 3;</code>
+     */
+    org.apache.dubbo.benchmark.bean.PagePB.UserOrBuilder getUserOrBuilder();
+
+    /**
+     * <code>string email = 4;</code>
+     */
+    java.lang.String getEmail();
+    /**
+     * <code>string email = 4;</code>
+     */
+    com.google.protobuf.ByteString
+        getEmailBytes();
+  }
+  /**
+   * Protobuf type {@code org.apache.dubbo.benchmark.bean.Request}
+   */
+  public  static final class Request extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:org.apache.dubbo.benchmark.bean.Request)
+      RequestOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Request.newBuilder() to construct.
+    private Request(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Request() {
+      email_ = "";
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Request(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+
+              id_ = input.readInt64();
+              break;
+            }
+            case 16: {
+
+              page_ = input.readInt32();
+              break;
+            }
+            case 26: {
+              org.apache.dubbo.benchmark.bean.PagePB.User.Builder subBuilder = null;
+              if (user_ != null) {
+                subBuilder = user_.toBuilder();
+              }
+              user_ = input.readMessage(org.apache.dubbo.benchmark.bean.PagePB.User.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(user_);
+                user_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 34: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              email_ = s;
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return org.apache.dubbo.benchmark.bean.PagePB.internal_static_org_apache_dubbo_benchmark_bean_Request_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return org.apache.dubbo.benchmark.bean.PagePB.internal_static_org_apache_dubbo_benchmark_bean_Request_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              org.apache.dubbo.benchmark.bean.PagePB.Request.class, org.apache.dubbo.benchmark.bean.PagePB.Request.Builder.class);
+    }
+
+    public static final int ID_FIELD_NUMBER = 1;
+    private long id_;
+    /**
+     * <code>int64 id = 1;</code>
+     */
+    public long getId() {
+      return id_;
+    }
+
+    public static final int PAGE_FIELD_NUMBER = 2;
+    private int page_;
+    /**
+     * <code>int32 page = 2;</code>
+     */
+    public int getPage() {
+      return page_;
+    }
+
+    public static final int USER_FIELD_NUMBER = 3;
+    private org.apache.dubbo.benchmark.bean.PagePB.User user_;
+    /**
+     * <code>.org.apache.dubbo.benchmark.bean.User user = 3;</code>
+     */
+    public boolean hasUser() {
+      return user_ != null;
+    }
+    /**
+     * <code>.org.apache.dubbo.benchmark.bean.User user = 3;</code>
+     */
+    public org.apache.dubbo.benchmark.bean.PagePB.User getUser() {
+      return user_ == null ? org.apache.dubbo.benchmark.bean.PagePB.User.getDefaultInstance() : user_;
+    }
+    /**
+     * <code>.org.apache.dubbo.benchmark.bean.User user = 3;</code>
+     */
+    public org.apache.dubbo.benchmark.bean.PagePB.UserOrBuilder getUserOrBuilder() {
+      return getUser();
+    }
+
+    public static final int EMAIL_FIELD_NUMBER = 4;
+    private volatile java.lang.Object email_;
+    /**
+     * <code>string email = 4;</code>
+     */
+    public java.lang.String getEmail() {
+      java.lang.Object ref = email_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        email_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string email = 4;</code>
+     */
+    public com.google.protobuf.ByteString
+        getEmailBytes() {
+      java.lang.Object ref = email_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        email_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (id_ != 0L) {
+        output.writeInt64(1, id_);
+      }
+      if (page_ != 0) {
+        output.writeInt32(2, page_);
+      }
+      if (user_ != null) {
+        output.writeMessage(3, getUser());
+      }
+      if (!getEmailBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, email_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (id_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(1, id_);
+      }
+      if (page_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(2, page_);
+      }
+      if (user_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, getUser());
+      }
+      if (!getEmailBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, email_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof org.apache.dubbo.benchmark.bean.PagePB.Request)) {
+        return super.equals(obj);
+      }
+      org.apache.dubbo.benchmark.bean.PagePB.Request other = (org.apache.dubbo.benchmark.bean.PagePB.Request) obj;
+
+      if (getId()
+          != other.getId()) return false;
+      if (getPage()
+          != other.getPage()) return false;
+      if (hasUser() != other.hasUser()) return false;
+      if (hasUser()) {
+        if (!getUser()
+            .equals(other.getUser())) return false;
+      }
+      if (!getEmail()
+          .equals(other.getEmail())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + ID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getId());
+      hash = (37 * hash) + PAGE_FIELD_NUMBER;
+      hash = (53 * hash) + getPage();
+      if (hasUser()) {
+        hash = (37 * hash) + USER_FIELD_NUMBER;
+        hash = (53 * hash) + getUser().hashCode();
+      }
+      hash = (37 * hash) + EMAIL_FIELD_NUMBER;
+      hash = (53 * hash) + getEmail().hashCode();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static org.apache.dubbo.benchmark.bean.PagePB.Request parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.Request parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.Request parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.Request parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.Request parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.Request parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.Request parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.Request parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.Request parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.Request parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.Request parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.Request parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(org.apache.dubbo.benchmark.bean.PagePB.Request prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code org.apache.dubbo.benchmark.bean.Request}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:org.apache.dubbo.benchmark.bean.Request)
+        org.apache.dubbo.benchmark.bean.PagePB.RequestOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return org.apache.dubbo.benchmark.bean.PagePB.internal_static_org_apache_dubbo_benchmark_bean_Request_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return org.apache.dubbo.benchmark.bean.PagePB.internal_static_org_apache_dubbo_benchmark_bean_Request_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                org.apache.dubbo.benchmark.bean.PagePB.Request.class, org.apache.dubbo.benchmark.bean.PagePB.Request.Builder.class);
+      }
+
+      // Construct using org.apache.dubbo.benchmark.bean.PagePB.Request.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        id_ = 0L;
+
+        page_ = 0;
+
+        if (userBuilder_ == null) {
+          user_ = null;
+        } else {
+          user_ = null;
+          userBuilder_ = null;
+        }
+        email_ = "";
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return org.apache.dubbo.benchmark.bean.PagePB.internal_static_org_apache_dubbo_benchmark_bean_Request_descriptor;
+      }
+
+      @java.lang.Override
+      public org.apache.dubbo.benchmark.bean.PagePB.Request getDefaultInstanceForType() {
+        return org.apache.dubbo.benchmark.bean.PagePB.Request.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public org.apache.dubbo.benchmark.bean.PagePB.Request build() {
+        org.apache.dubbo.benchmark.bean.PagePB.Request result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public org.apache.dubbo.benchmark.bean.PagePB.Request buildPartial() {
+        org.apache.dubbo.benchmark.bean.PagePB.Request result = new org.apache.dubbo.benchmark.bean.PagePB.Request(this);
+        result.id_ = id_;
+        result.page_ = page_;
+        if (userBuilder_ == null) {
+          result.user_ = user_;
+        } else {
+          result.user_ = userBuilder_.build();
+        }
+        result.email_ = email_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof org.apache.dubbo.benchmark.bean.PagePB.Request) {
+          return mergeFrom((org.apache.dubbo.benchmark.bean.PagePB.Request)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(org.apache.dubbo.benchmark.bean.PagePB.Request other) {
+        if (other == org.apache.dubbo.benchmark.bean.PagePB.Request.getDefaultInstance()) return this;
+        if (other.getId() != 0L) {
+          setId(other.getId());
+        }
+        if (other.getPage() != 0) {
+          setPage(other.getPage());
+        }
+        if (other.hasUser()) {
+          mergeUser(other.getUser());
+        }
+        if (!other.getEmail().isEmpty()) {
+          email_ = other.email_;
+          onChanged();
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        org.apache.dubbo.benchmark.bean.PagePB.Request parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (org.apache.dubbo.benchmark.bean.PagePB.Request) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private long id_ ;
+      /**
+       * <code>int64 id = 1;</code>
+       */
+      public long getId() {
+        return id_;
+      }
+      /**
+       * <code>int64 id = 1;</code>
+       */
+      public Builder setId(long value) {
+        
+        id_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>int64 id = 1;</code>
+       */
+      public Builder clearId() {
+        
+        id_ = 0L;
+        onChanged();
+        return this;
+      }
+
+      private int page_ ;
+      /**
+       * <code>int32 page = 2;</code>
+       */
+      public int getPage() {
+        return page_;
+      }
+      /**
+       * <code>int32 page = 2;</code>
+       */
+      public Builder setPage(int value) {
+        
+        page_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>int32 page = 2;</code>
+       */
+      public Builder clearPage() {
+        
+        page_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private org.apache.dubbo.benchmark.bean.PagePB.User user_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          org.apache.dubbo.benchmark.bean.PagePB.User, org.apache.dubbo.benchmark.bean.PagePB.User.Builder, org.apache.dubbo.benchmark.bean.PagePB.UserOrBuilder> userBuilder_;
+      /**
+       * <code>.org.apache.dubbo.benchmark.bean.User user = 3;</code>
+       */
+      public boolean hasUser() {
+        return userBuilder_ != null || user_ != null;
+      }
+      /**
+       * <code>.org.apache.dubbo.benchmark.bean.User user = 3;</code>
+       */
+      public org.apache.dubbo.benchmark.bean.PagePB.User getUser() {
+        if (userBuilder_ == null) {
+          return user_ == null ? org.apache.dubbo.benchmark.bean.PagePB.User.getDefaultInstance() : user_;
+        } else {
+          return userBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.org.apache.dubbo.benchmark.bean.User user = 3;</code>
+       */
+      public Builder setUser(org.apache.dubbo.benchmark.bean.PagePB.User value) {
+        if (userBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          user_ = value;
+          onChanged();
+        } else {
+          userBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.org.apache.dubbo.benchmark.bean.User user = 3;</code>
+       */
+      public Builder setUser(
+          org.apache.dubbo.benchmark.bean.PagePB.User.Builder builderForValue) {
+        if (userBuilder_ == null) {
+          user_ = builderForValue.build();
+          onChanged();
+        } else {
+          userBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.org.apache.dubbo.benchmark.bean.User user = 3;</code>
+       */
+      public Builder mergeUser(org.apache.dubbo.benchmark.bean.PagePB.User value) {
+        if (userBuilder_ == null) {
+          if (user_ != null) {
+            user_ =
+              org.apache.dubbo.benchmark.bean.PagePB.User.newBuilder(user_).mergeFrom(value).buildPartial();
+          } else {
+            user_ = value;
+          }
+          onChanged();
+        } else {
+          userBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.org.apache.dubbo.benchmark.bean.User user = 3;</code>
+       */
+      public Builder clearUser() {
+        if (userBuilder_ == null) {
+          user_ = null;
+          onChanged();
+        } else {
+          user_ = null;
+          userBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.org.apache.dubbo.benchmark.bean.User user = 3;</code>
+       */
+      public org.apache.dubbo.benchmark.bean.PagePB.User.Builder getUserBuilder() {
+        
+        onChanged();
+        return getUserFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.org.apache.dubbo.benchmark.bean.User user = 3;</code>
+       */
+      public org.apache.dubbo.benchmark.bean.PagePB.UserOrBuilder getUserOrBuilder() {
+        if (userBuilder_ != null) {
+          return userBuilder_.getMessageOrBuilder();
+        } else {
+          return user_ == null ?
+              org.apache.dubbo.benchmark.bean.PagePB.User.getDefaultInstance() : user_;
+        }
+      }
+      /**
+       * <code>.org.apache.dubbo.benchmark.bean.User user = 3;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          org.apache.dubbo.benchmark.bean.PagePB.User, org.apache.dubbo.benchmark.bean.PagePB.User.Builder, org.apache.dubbo.benchmark.bean.PagePB.UserOrBuilder> 
+          getUserFieldBuilder() {
+        if (userBuilder_ == null) {
+          userBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              org.apache.dubbo.benchmark.bean.PagePB.User, org.apache.dubbo.benchmark.bean.PagePB.User.Builder, org.apache.dubbo.benchmark.bean.PagePB.UserOrBuilder>(
+                  getUser(),
+                  getParentForChildren(),
+                  isClean());
+          user_ = null;
+        }
+        return userBuilder_;
+      }
+
+      private java.lang.Object email_ = "";
+      /**
+       * <code>string email = 4;</code>
+       */
+      public java.lang.String getEmail() {
+        java.lang.Object ref = email_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          email_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string email = 4;</code>
+       */
+      public com.google.protobuf.ByteString
+          getEmailBytes() {
+        java.lang.Object ref = email_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          email_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string email = 4;</code>
+       */
+      public Builder setEmail(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        email_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string email = 4;</code>
+       */
+      public Builder clearEmail() {
+        
+        email_ = getDefaultInstance().getEmail();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string email = 4;</code>
+       */
+      public Builder setEmailBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        email_ = value;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:org.apache.dubbo.benchmark.bean.Request)
+    }
+
+    // @@protoc_insertion_point(class_scope:org.apache.dubbo.benchmark.bean.Request)
+    private static final org.apache.dubbo.benchmark.bean.PagePB.Request DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new org.apache.dubbo.benchmark.bean.PagePB.Request();
+    }
+
+    public static org.apache.dubbo.benchmark.bean.PagePB.Request getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Request>
+        PARSER = new com.google.protobuf.AbstractParser<Request>() {
+      @java.lang.Override
+      public Request parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Request(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Request> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Request> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public org.apache.dubbo.benchmark.bean.PagePB.Request getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ResponseOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:org.apache.dubbo.benchmark.bean.Response)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>bool state = 1;</code>
+     */
+    boolean getState();
+
+    /**
+     * <code>.org.apache.dubbo.benchmark.bean.User user = 2;</code>
+     */
+    boolean hasUser();
+    /**
+     * <code>.org.apache.dubbo.benchmark.bean.User user = 2;</code>
+     */
+    org.apache.dubbo.benchmark.bean.PagePB.User getUser();
+    /**
+     * <code>.org.apache.dubbo.benchmark.bean.User user = 2;</code>
+     */
+    org.apache.dubbo.benchmark.bean.PagePB.UserOrBuilder getUserOrBuilder();
+
+    /**
+     * <code>.org.apache.dubbo.benchmark.bean.Page page = 3;</code>
+     */
+    boolean hasPage();
+    /**
+     * <code>.org.apache.dubbo.benchmark.bean.Page page = 3;</code>
+     */
+    org.apache.dubbo.benchmark.bean.PagePB.Page getPage();
+    /**
+     * <code>.org.apache.dubbo.benchmark.bean.Page page = 3;</code>
+     */
+    org.apache.dubbo.benchmark.bean.PagePB.PageOrBuilder getPageOrBuilder();
+  }
+  /**
+   * Protobuf type {@code org.apache.dubbo.benchmark.bean.Response}
+   */
+  public  static final class Response extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:org.apache.dubbo.benchmark.bean.Response)
+      ResponseOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Response.newBuilder() to construct.
+    private Response(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Response() {
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Response(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+
+              state_ = input.readBool();
+              break;
+            }
+            case 18: {
+              org.apache.dubbo.benchmark.bean.PagePB.User.Builder subBuilder = null;
+              if (user_ != null) {
+                subBuilder = user_.toBuilder();
+              }
+              user_ = input.readMessage(org.apache.dubbo.benchmark.bean.PagePB.User.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(user_);
+                user_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 26: {
+              org.apache.dubbo.benchmark.bean.PagePB.Page.Builder subBuilder = null;
+              if (page_ != null) {
+                subBuilder = page_.toBuilder();
+              }
+              page_ = input.readMessage(org.apache.dubbo.benchmark.bean.PagePB.Page.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(page_);
+                page_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return org.apache.dubbo.benchmark.bean.PagePB.internal_static_org_apache_dubbo_benchmark_bean_Response_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return org.apache.dubbo.benchmark.bean.PagePB.internal_static_org_apache_dubbo_benchmark_bean_Response_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              org.apache.dubbo.benchmark.bean.PagePB.Response.class, org.apache.dubbo.benchmark.bean.PagePB.Response.Builder.class);
+    }
+
+    public static final int STATE_FIELD_NUMBER = 1;
+    private boolean state_;
+    /**
+     * <code>bool state = 1;</code>
+     */
+    public boolean getState() {
+      return state_;
+    }
+
+    public static final int USER_FIELD_NUMBER = 2;
+    private org.apache.dubbo.benchmark.bean.PagePB.User user_;
+    /**
+     * <code>.org.apache.dubbo.benchmark.bean.User user = 2;</code>
+     */
+    public boolean hasUser() {
+      return user_ != null;
+    }
+    /**
+     * <code>.org.apache.dubbo.benchmark.bean.User user = 2;</code>
+     */
+    public org.apache.dubbo.benchmark.bean.PagePB.User getUser() {
+      return user_ == null ? org.apache.dubbo.benchmark.bean.PagePB.User.getDefaultInstance() : user_;
+    }
+    /**
+     * <code>.org.apache.dubbo.benchmark.bean.User user = 2;</code>
+     */
+    public org.apache.dubbo.benchmark.bean.PagePB.UserOrBuilder getUserOrBuilder() {
+      return getUser();
+    }
+
+    public static final int PAGE_FIELD_NUMBER = 3;
+    private org.apache.dubbo.benchmark.bean.PagePB.Page page_;
+    /**
+     * <code>.org.apache.dubbo.benchmark.bean.Page page = 3;</code>
+     */
+    public boolean hasPage() {
+      return page_ != null;
+    }
+    /**
+     * <code>.org.apache.dubbo.benchmark.bean.Page page = 3;</code>
+     */
+    public org.apache.dubbo.benchmark.bean.PagePB.Page getPage() {
+      return page_ == null ? org.apache.dubbo.benchmark.bean.PagePB.Page.getDefaultInstance() : page_;
+    }
+    /**
+     * <code>.org.apache.dubbo.benchmark.bean.Page page = 3;</code>
+     */
+    public org.apache.dubbo.benchmark.bean.PagePB.PageOrBuilder getPageOrBuilder() {
+      return getPage();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (state_ != false) {
+        output.writeBool(1, state_);
+      }
+      if (user_ != null) {
+        output.writeMessage(2, getUser());
+      }
+      if (page_ != null) {
+        output.writeMessage(3, getPage());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (state_ != false) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(1, state_);
+      }
+      if (user_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getUser());
+      }
+      if (page_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, getPage());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof org.apache.dubbo.benchmark.bean.PagePB.Response)) {
+        return super.equals(obj);
+      }
+      org.apache.dubbo.benchmark.bean.PagePB.Response other = (org.apache.dubbo.benchmark.bean.PagePB.Response) obj;
+
+      if (getState()
+          != other.getState()) return false;
+      if (hasUser() != other.hasUser()) return false;
+      if (hasUser()) {
+        if (!getUser()
+            .equals(other.getUser())) return false;
+      }
+      if (hasPage() != other.hasPage()) return false;
+      if (hasPage()) {
+        if (!getPage()
+            .equals(other.getPage())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + STATE_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+          getState());
+      if (hasUser()) {
+        hash = (37 * hash) + USER_FIELD_NUMBER;
+        hash = (53 * hash) + getUser().hashCode();
+      }
+      if (hasPage()) {
+        hash = (37 * hash) + PAGE_FIELD_NUMBER;
+        hash = (53 * hash) + getPage().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static org.apache.dubbo.benchmark.bean.PagePB.Response parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.Response parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.Response parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.Response parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.Response parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.Response parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.Response parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.Response parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.Response parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.Response parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.Response parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static org.apache.dubbo.benchmark.bean.PagePB.Response parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(org.apache.dubbo.benchmark.bean.PagePB.Response prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code org.apache.dubbo.benchmark.bean.Response}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:org.apache.dubbo.benchmark.bean.Response)
+        org.apache.dubbo.benchmark.bean.PagePB.ResponseOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return org.apache.dubbo.benchmark.bean.PagePB.internal_static_org_apache_dubbo_benchmark_bean_Response_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return org.apache.dubbo.benchmark.bean.PagePB.internal_static_org_apache_dubbo_benchmark_bean_Response_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                org.apache.dubbo.benchmark.bean.PagePB.Response.class, org.apache.dubbo.benchmark.bean.PagePB.Response.Builder.class);
+      }
+
+      // Construct using org.apache.dubbo.benchmark.bean.PagePB.Response.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        state_ = false;
+
+        if (userBuilder_ == null) {
+          user_ = null;
+        } else {
+          user_ = null;
+          userBuilder_ = null;
+        }
+        if (pageBuilder_ == null) {
+          page_ = null;
+        } else {
+          page_ = null;
+          pageBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return org.apache.dubbo.benchmark.bean.PagePB.internal_static_org_apache_dubbo_benchmark_bean_Response_descriptor;
+      }
+
+      @java.lang.Override
+      public org.apache.dubbo.benchmark.bean.PagePB.Response getDefaultInstanceForType() {
+        return org.apache.dubbo.benchmark.bean.PagePB.Response.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public org.apache.dubbo.benchmark.bean.PagePB.Response build() {
+        org.apache.dubbo.benchmark.bean.PagePB.Response result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public org.apache.dubbo.benchmark.bean.PagePB.Response buildPartial() {
+        org.apache.dubbo.benchmark.bean.PagePB.Response result = new org.apache.dubbo.benchmark.bean.PagePB.Response(this);
+        result.state_ = state_;
+        if (userBuilder_ == null) {
+          result.user_ = user_;
+        } else {
+          result.user_ = userBuilder_.build();
+        }
+        if (pageBuilder_ == null) {
+          result.page_ = page_;
+        } else {
+          result.page_ = pageBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof org.apache.dubbo.benchmark.bean.PagePB.Response) {
+          return mergeFrom((org.apache.dubbo.benchmark.bean.PagePB.Response)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(org.apache.dubbo.benchmark.bean.PagePB.Response other) {
+        if (other == org.apache.dubbo.benchmark.bean.PagePB.Response.getDefaultInstance()) return this;
+        if (other.getState() != false) {
+          setState(other.getState());
+        }
+        if (other.hasUser()) {
+          mergeUser(other.getUser());
+        }
+        if (other.hasPage()) {
+          mergePage(other.getPage());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        org.apache.dubbo.benchmark.bean.PagePB.Response parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (org.apache.dubbo.benchmark.bean.PagePB.Response) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private boolean state_ ;
+      /**
+       * <code>bool state = 1;</code>
+       */
+      public boolean getState() {
+        return state_;
+      }
+      /**
+       * <code>bool state = 1;</code>
+       */
+      public Builder setState(boolean value) {
+        
+        state_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>bool state = 1;</code>
+       */
+      public Builder clearState() {
+        
+        state_ = false;
+        onChanged();
+        return this;
+      }
+
+      private org.apache.dubbo.benchmark.bean.PagePB.User user_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          org.apache.dubbo.benchmark.bean.PagePB.User, org.apache.dubbo.benchmark.bean.PagePB.User.Builder, org.apache.dubbo.benchmark.bean.PagePB.UserOrBuilder> userBuilder_;
+      /**
+       * <code>.org.apache.dubbo.benchmark.bean.User user = 2;</code>
+       */
+      public boolean hasUser() {
+        return userBuilder_ != null || user_ != null;
+      }
+      /**
+       * <code>.org.apache.dubbo.benchmark.bean.User user = 2;</code>
+       */
+      public org.apache.dubbo.benchmark.bean.PagePB.User getUser() {
+        if (userBuilder_ == null) {
+          return user_ == null ? org.apache.dubbo.benchmark.bean.PagePB.User.getDefaultInstance() : user_;
+        } else {
+          return userBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.org.apache.dubbo.benchmark.bean.User user = 2;</code>
+       */
+      public Builder setUser(org.apache.dubbo.benchmark.bean.PagePB.User value) {
+        if (userBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          user_ = value;
+          onChanged();
+        } else {
+          userBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.org.apache.dubbo.benchmark.bean.User user = 2;</code>
+       */
+      public Builder setUser(
+          org.apache.dubbo.benchmark.bean.PagePB.User.Builder builderForValue) {
+        if (userBuilder_ == null) {
+          user_ = builderForValue.build();
+          onChanged();
+        } else {
+          userBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.org.apache.dubbo.benchmark.bean.User user = 2;</code>
+       */
+      public Builder mergeUser(org.apache.dubbo.benchmark.bean.PagePB.User value) {
+        if (userBuilder_ == null) {
+          if (user_ != null) {
+            user_ =
+              org.apache.dubbo.benchmark.bean.PagePB.User.newBuilder(user_).mergeFrom(value).buildPartial();
+          } else {
+            user_ = value;
+          }
+          onChanged();
+        } else {
+          userBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.org.apache.dubbo.benchmark.bean.User user = 2;</code>
+       */
+      public Builder clearUser() {
+        if (userBuilder_ == null) {
+          user_ = null;
+          onChanged();
+        } else {
+          user_ = null;
+          userBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.org.apache.dubbo.benchmark.bean.User user = 2;</code>
+       */
+      public org.apache.dubbo.benchmark.bean.PagePB.User.Builder getUserBuilder() {
+        
+        onChanged();
+        return getUserFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.org.apache.dubbo.benchmark.bean.User user = 2;</code>
+       */
+      public org.apache.dubbo.benchmark.bean.PagePB.UserOrBuilder getUserOrBuilder() {
+        if (userBuilder_ != null) {
+          return userBuilder_.getMessageOrBuilder();
+        } else {
+          return user_ == null ?
+              org.apache.dubbo.benchmark.bean.PagePB.User.getDefaultInstance() : user_;
+        }
+      }
+      /**
+       * <code>.org.apache.dubbo.benchmark.bean.User user = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          org.apache.dubbo.benchmark.bean.PagePB.User, org.apache.dubbo.benchmark.bean.PagePB.User.Builder, org.apache.dubbo.benchmark.bean.PagePB.UserOrBuilder> 
+          getUserFieldBuilder() {
+        if (userBuilder_ == null) {
+          userBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              org.apache.dubbo.benchmark.bean.PagePB.User, org.apache.dubbo.benchmark.bean.PagePB.User.Builder, org.apache.dubbo.benchmark.bean.PagePB.UserOrBuilder>(
+                  getUser(),
+                  getParentForChildren(),
+                  isClean());
+          user_ = null;
+        }
+        return userBuilder_;
+      }
+
+      private org.apache.dubbo.benchmark.bean.PagePB.Page page_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          org.apache.dubbo.benchmark.bean.PagePB.Page, org.apache.dubbo.benchmark.bean.PagePB.Page.Builder, org.apache.dubbo.benchmark.bean.PagePB.PageOrBuilder> pageBuilder_;
+      /**
+       * <code>.org.apache.dubbo.benchmark.bean.Page page = 3;</code>
+       */
+      public boolean hasPage() {
+        return pageBuilder_ != null || page_ != null;
+      }
+      /**
+       * <code>.org.apache.dubbo.benchmark.bean.Page page = 3;</code>
+       */
+      public org.apache.dubbo.benchmark.bean.PagePB.Page getPage() {
+        if (pageBuilder_ == null) {
+          return page_ == null ? org.apache.dubbo.benchmark.bean.PagePB.Page.getDefaultInstance() : page_;
+        } else {
+          return pageBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.org.apache.dubbo.benchmark.bean.Page page = 3;</code>
+       */
+      public Builder setPage(org.apache.dubbo.benchmark.bean.PagePB.Page value) {
+        if (pageBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          page_ = value;
+          onChanged();
+        } else {
+          pageBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.org.apache.dubbo.benchmark.bean.Page page = 3;</code>
+       */
+      public Builder setPage(
+          org.apache.dubbo.benchmark.bean.PagePB.Page.Builder builderForValue) {
+        if (pageBuilder_ == null) {
+          page_ = builderForValue.build();
+          onChanged();
+        } else {
+          pageBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.org.apache.dubbo.benchmark.bean.Page page = 3;</code>
+       */
+      public Builder mergePage(org.apache.dubbo.benchmark.bean.PagePB.Page value) {
+        if (pageBuilder_ == null) {
+          if (page_ != null) {
+            page_ =
+              org.apache.dubbo.benchmark.bean.PagePB.Page.newBuilder(page_).mergeFrom(value).buildPartial();
+          } else {
+            page_ = value;
+          }
+          onChanged();
+        } else {
+          pageBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.org.apache.dubbo.benchmark.bean.Page page = 3;</code>
+       */
+      public Builder clearPage() {
+        if (pageBuilder_ == null) {
+          page_ = null;
+          onChanged();
+        } else {
+          page_ = null;
+          pageBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.org.apache.dubbo.benchmark.bean.Page page = 3;</code>
+       */
+      public org.apache.dubbo.benchmark.bean.PagePB.Page.Builder getPageBuilder() {
+        
+        onChanged();
+        return getPageFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.org.apache.dubbo.benchmark.bean.Page page = 3;</code>
+       */
+      public org.apache.dubbo.benchmark.bean.PagePB.PageOrBuilder getPageOrBuilder() {
+        if (pageBuilder_ != null) {
+          return pageBuilder_.getMessageOrBuilder();
+        } else {
+          return page_ == null ?
+              org.apache.dubbo.benchmark.bean.PagePB.Page.getDefaultInstance() : page_;
+        }
+      }
+      /**
+       * <code>.org.apache.dubbo.benchmark.bean.Page page = 3;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          org.apache.dubbo.benchmark.bean.PagePB.Page, org.apache.dubbo.benchmark.bean.PagePB.Page.Builder, org.apache.dubbo.benchmark.bean.PagePB.PageOrBuilder> 
+          getPageFieldBuilder() {
+        if (pageBuilder_ == null) {
+          pageBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              org.apache.dubbo.benchmark.bean.PagePB.Page, org.apache.dubbo.benchmark.bean.PagePB.Page.Builder, org.apache.dubbo.benchmark.bean.PagePB.PageOrBuilder>(
+                  getPage(),
+                  getParentForChildren(),
+                  isClean());
+          page_ = null;
+        }
+        return pageBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:org.apache.dubbo.benchmark.bean.Response)
+    }
+
+    // @@protoc_insertion_point(class_scope:org.apache.dubbo.benchmark.bean.Response)
+    private static final org.apache.dubbo.benchmark.bean.PagePB.Response DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new org.apache.dubbo.benchmark.bean.PagePB.Response();
+    }
+
+    public static org.apache.dubbo.benchmark.bean.PagePB.Response getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Response>
+        PARSER = new com.google.protobuf.AbstractParser<Response>() {
+      @java.lang.Override
+      public Response parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Response(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Response> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Response> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public org.apache.dubbo.benchmark.bean.PagePB.Response getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_org_apache_dubbo_benchmark_bean_Page_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_org_apache_dubbo_benchmark_bean_Page_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_org_apache_dubbo_benchmark_bean_User_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_org_apache_dubbo_benchmark_bean_User_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_org_apache_dubbo_benchmark_bean_Request_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_org_apache_dubbo_benchmark_bean_Request_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_org_apache_dubbo_benchmark_bean_Response_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_org_apache_dubbo_benchmark_bean_Response_fieldAccessorTable;
+
+  public static com.google.protobuf.Descriptors.FileDescriptor
+      getDescriptor() {
+    return descriptor;
+  }
+  private static  com.google.protobuf.Descriptors.FileDescriptor
+      descriptor;
+  static {
+    java.lang.String[] descriptorData = {
+      "\n\nPage.proto\022\037org.apache.dubbo.benchmark" +
+      ".bean\032\037google/protobuf/timestamp.proto\"[" +
+      "\n\004Page\0224\n\005users\030\001 \003(\0132%.org.apache.dubbo" +
+      ".benchmark.bean.User\022\016\n\006pageNo\030\002 \001(\005\022\r\n\005" +
+      "total\030\003 \001(\005\"\236\002\n\004User\022\n\n\002id\030\001 \001(\003\022\014\n\004name" +
+      "\030\002 \001(\t\022\013\n\003sex\030\003 \001(\005\022,\n\010birthday\030\004 \001(\0132\032." +
+      "google.protobuf.Timestamp\022\r\n\005email\030\005 \001(\t" +
+      "\022\016\n\006mobile\030\006 \001(\t\022\017\n\007address\030\007 \001(\t\022\014\n\004ico" +
+      "n\030\010 \001(\t\022\023\n\013permissions\030\t \003(\005\022\016\n\006status\030\n" +
+      " \001(\005\022.\n\ncreateTime\030\013 \001(\0132\032.google.protob" +
+      "uf.Timestamp\022.\n\nupdateTime\030\014 \001(\0132\032.googl" +
+      "e.protobuf.Timestamp\"g\n\007Request\022\n\n\002id\030\001 " +
+      "\001(\003\022\014\n\004page\030\002 \001(\005\0223\n\004user\030\003 \001(\0132%.org.ap" +
+      "ache.dubbo.benchmark.bean.User\022\r\n\005email\030" +
+      "\004 \001(\t\"\203\001\n\010Response\022\r\n\005state\030\001 \001(\010\0223\n\004use" +
+      "r\030\002 \001(\0132%.org.apache.dubbo.benchmark.bea" +
+      "n.User\0223\n\004page\030\003 \001(\0132%.org.apache.dubbo." +
+      "benchmark.bean.Page2\223\003\n\013UserService\022`\n\te" +
+      "xistUser\022(.org.apache.dubbo.benchmark.be" +
+      "an.Request\032).org.apache.dubbo.benchmark." +
+      "bean.Response\022a\n\ncreateUser\022(.org.apache" +
+      ".dubbo.benchmark.bean.Request\032).org.apac" +
+      "he.dubbo.benchmark.bean.Response\022^\n\007getU" +
+      "ser\022(.org.apache.dubbo.benchmark.bean.Re" +
+      "quest\032).org.apache.dubbo.benchmark.bean." +
+      "Response\022_\n\010listUser\022(.org.apache.dubbo." +
+      "benchmark.bean.Request\032).org.apache.dubb" +
+      "o.benchmark.bean.ResponseB)\n\037org.apache." +
+      "dubbo.benchmark.beanB\006PagePBP\000b\006proto3"
+    };
+    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
+        new com.google.protobuf.Descriptors.FileDescriptor.    InternalDescriptorAssigner() {
+          public com.google.protobuf.ExtensionRegistry assignDescriptors(
+              com.google.protobuf.Descriptors.FileDescriptor root) {
+            descriptor = root;
+            return null;
+          }
+        };
+    com.google.protobuf.Descriptors.FileDescriptor
+      .internalBuildGeneratedFileFrom(descriptorData,
+        new com.google.protobuf.Descriptors.FileDescriptor[] {
+          com.google.protobuf.TimestampProto.getDescriptor(),
+        }, assigner);
+    internal_static_org_apache_dubbo_benchmark_bean_Page_descriptor =
+      getDescriptor().getMessageTypes().get(0);
+    internal_static_org_apache_dubbo_benchmark_bean_Page_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_org_apache_dubbo_benchmark_bean_Page_descriptor,
+        new java.lang.String[] { "Users", "PageNo", "Total", });
+    internal_static_org_apache_dubbo_benchmark_bean_User_descriptor =
+      getDescriptor().getMessageTypes().get(1);
+    internal_static_org_apache_dubbo_benchmark_bean_User_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_org_apache_dubbo_benchmark_bean_User_descriptor,
+        new java.lang.String[] { "Id", "Name", "Sex", "Birthday", "Email", "Mobile", "Address", "Icon", "Permissions", "Status", "CreateTime", "UpdateTime", });
+    internal_static_org_apache_dubbo_benchmark_bean_Request_descriptor =
+      getDescriptor().getMessageTypes().get(2);
+    internal_static_org_apache_dubbo_benchmark_bean_Request_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_org_apache_dubbo_benchmark_bean_Request_descriptor,
+        new java.lang.String[] { "Id", "Page", "User", "Email", });
+    internal_static_org_apache_dubbo_benchmark_bean_Response_descriptor =
+      getDescriptor().getMessageTypes().get(3);
+    internal_static_org_apache_dubbo_benchmark_bean_Response_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_org_apache_dubbo_benchmark_bean_Response_descriptor,
+        new java.lang.String[] { "State", "User", "Page", });
+    com.google.protobuf.TimestampProto.getDescriptor();
+  }
+
+  // @@protoc_insertion_point(outer_class_scope)
+}
diff --git a/benchmark-base/build/generated/source/proto/main/java/org/apache/dubbo/benchmark/bean/UserServiceDubbo.java b/benchmark-base/build/generated/source/proto/main/java/org/apache/dubbo/benchmark/bean/UserServiceDubbo.java
new file mode 100644
index 0000000..4ac53f0
--- /dev/null
+++ b/benchmark-base/build/generated/source/proto/main/java/org/apache/dubbo/benchmark/bean/UserServiceDubbo.java
@@ -0,0 +1,59 @@
+
+    package org.apache.dubbo.benchmark.bean;
+
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+@javax.annotation.Generated(
+value = "by Dubbo generator",
+comments = "Source: Page.proto")
+public final class UserServiceDubbo {
+private static final AtomicBoolean registered = new AtomicBoolean();
+
+private static Class<?> init() {
+Class<?> clazz = null;
+try {
+clazz = Class.forName(UserServiceDubbo.class.getName());
+if (registered.compareAndSet(false, true)) {
+    org.apache.dubbo.common.serialize.protobuf.support.ProtobufUtils.marshaller(
+    org.apache.dubbo.benchmark.bean.PagePB.Response.getDefaultInstance());
+    org.apache.dubbo.common.serialize.protobuf.support.ProtobufUtils.marshaller(
+    org.apache.dubbo.benchmark.bean.PagePB.Request.getDefaultInstance());
+}
+} catch (ClassNotFoundException e) {
+// ignore
+}
+return clazz;
+}
+
+private UserServiceDubbo() {}
+
+public static final String SERVICE_NAME = "org.apache.dubbo.benchmark.bean.UserService";
+
+/**
+* Code generated for Dubbo
+*/
+public interface IUserService {
+
+static Class<?> clazz = init();
+
+    org.apache.dubbo.benchmark.bean.PagePB.Response existUser(org.apache.dubbo.benchmark.bean.PagePB.Request request);
+
+    CompletableFuture<org.apache.dubbo.benchmark.bean.PagePB.Response> existUserAsync(org.apache.dubbo.benchmark.bean.PagePB.Request request);
+
+    org.apache.dubbo.benchmark.bean.PagePB.Response createUser(org.apache.dubbo.benchmark.bean.PagePB.Request request);
+
+    CompletableFuture<org.apache.dubbo.benchmark.bean.PagePB.Response> createUserAsync(org.apache.dubbo.benchmark.bean.PagePB.Request request);
+
+    org.apache.dubbo.benchmark.bean.PagePB.Response getUser(org.apache.dubbo.benchmark.bean.PagePB.Request request);
+
+    CompletableFuture<org.apache.dubbo.benchmark.bean.PagePB.Response> getUserAsync(org.apache.dubbo.benchmark.bean.PagePB.Request request);
+
+    org.apache.dubbo.benchmark.bean.PagePB.Response listUser(org.apache.dubbo.benchmark.bean.PagePB.Request request);
+
+    CompletableFuture<org.apache.dubbo.benchmark.bean.PagePB.Response> listUserAsync(org.apache.dubbo.benchmark.bean.PagePB.Request request);
+
+
+}
+
+}
diff --git a/benchmark-base/build/generated/source/proto/main/java/org/apache/dubbo/benchmark/bean/UserServiceGrpc.java b/benchmark-base/build/generated/source/proto/main/java/org/apache/dubbo/benchmark/bean/UserServiceGrpc.java
new file mode 100644
index 0000000..8eacd6c
--- /dev/null
+++ b/benchmark-base/build/generated/source/proto/main/java/org/apache/dubbo/benchmark/bean/UserServiceGrpc.java
@@ -0,0 +1,505 @@
+package org.apache.dubbo.benchmark.bean;
+
+import static io.grpc.MethodDescriptor.generateFullMethodName;
+import static io.grpc.stub.ClientCalls.asyncBidiStreamingCall;
+import static io.grpc.stub.ClientCalls.asyncClientStreamingCall;
+import static io.grpc.stub.ClientCalls.asyncServerStreamingCall;
+import static io.grpc.stub.ClientCalls.asyncUnaryCall;
+import static io.grpc.stub.ClientCalls.blockingServerStreamingCall;
+import static io.grpc.stub.ClientCalls.blockingUnaryCall;
+import static io.grpc.stub.ClientCalls.futureUnaryCall;
+import static io.grpc.stub.ServerCalls.asyncBidiStreamingCall;
+import static io.grpc.stub.ServerCalls.asyncClientStreamingCall;
+import static io.grpc.stub.ServerCalls.asyncServerStreamingCall;
+import static io.grpc.stub.ServerCalls.asyncUnaryCall;
+import static io.grpc.stub.ServerCalls.asyncUnimplementedStreamingCall;
+import static io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall;
+
+/**
+ */
+@javax.annotation.Generated(
+    value = "by gRPC proto compiler (version 1.19.0)",
+    comments = "Source: Page.proto")
+public final class UserServiceGrpc {
+
+  private UserServiceGrpc() {}
+
+  public static final String SERVICE_NAME = "org.apache.dubbo.benchmark.bean.UserService";
+
+  // Static method descriptors that strictly reflect the proto.
+  private static volatile io.grpc.MethodDescriptor<org.apache.dubbo.benchmark.bean.PagePB.Request,
+      org.apache.dubbo.benchmark.bean.PagePB.Response> getExistUserMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "existUser",
+      requestType = org.apache.dubbo.benchmark.bean.PagePB.Request.class,
+      responseType = org.apache.dubbo.benchmark.bean.PagePB.Response.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<org.apache.dubbo.benchmark.bean.PagePB.Request,
+      org.apache.dubbo.benchmark.bean.PagePB.Response> getExistUserMethod() {
+    io.grpc.MethodDescriptor<org.apache.dubbo.benchmark.bean.PagePB.Request, org.apache.dubbo.benchmark.bean.PagePB.Response> getExistUserMethod;
+    if ((getExistUserMethod = UserServiceGrpc.getExistUserMethod) == null) {
+      synchronized (UserServiceGrpc.class) {
+        if ((getExistUserMethod = UserServiceGrpc.getExistUserMethod) == null) {
+          UserServiceGrpc.getExistUserMethod = getExistUserMethod = 
+              io.grpc.MethodDescriptor.<org.apache.dubbo.benchmark.bean.PagePB.Request, org.apache.dubbo.benchmark.bean.PagePB.Response>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(
+                  "org.apache.dubbo.benchmark.bean.UserService", "existUser"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  org.apache.dubbo.benchmark.bean.PagePB.Request.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  org.apache.dubbo.benchmark.bean.PagePB.Response.getDefaultInstance()))
+                  .setSchemaDescriptor(new UserServiceMethodDescriptorSupplier("existUser"))
+                  .build();
+          }
+        }
+     }
+     return getExistUserMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<org.apache.dubbo.benchmark.bean.PagePB.Request,
+      org.apache.dubbo.benchmark.bean.PagePB.Response> getCreateUserMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "createUser",
+      requestType = org.apache.dubbo.benchmark.bean.PagePB.Request.class,
+      responseType = org.apache.dubbo.benchmark.bean.PagePB.Response.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<org.apache.dubbo.benchmark.bean.PagePB.Request,
+      org.apache.dubbo.benchmark.bean.PagePB.Response> getCreateUserMethod() {
+    io.grpc.MethodDescriptor<org.apache.dubbo.benchmark.bean.PagePB.Request, org.apache.dubbo.benchmark.bean.PagePB.Response> getCreateUserMethod;
+    if ((getCreateUserMethod = UserServiceGrpc.getCreateUserMethod) == null) {
+      synchronized (UserServiceGrpc.class) {
+        if ((getCreateUserMethod = UserServiceGrpc.getCreateUserMethod) == null) {
+          UserServiceGrpc.getCreateUserMethod = getCreateUserMethod = 
+              io.grpc.MethodDescriptor.<org.apache.dubbo.benchmark.bean.PagePB.Request, org.apache.dubbo.benchmark.bean.PagePB.Response>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(
+                  "org.apache.dubbo.benchmark.bean.UserService", "createUser"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  org.apache.dubbo.benchmark.bean.PagePB.Request.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  org.apache.dubbo.benchmark.bean.PagePB.Response.getDefaultInstance()))
+                  .setSchemaDescriptor(new UserServiceMethodDescriptorSupplier("createUser"))
+                  .build();
+          }
+        }
+     }
+     return getCreateUserMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<org.apache.dubbo.benchmark.bean.PagePB.Request,
+      org.apache.dubbo.benchmark.bean.PagePB.Response> getGetUserMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "getUser",
+      requestType = org.apache.dubbo.benchmark.bean.PagePB.Request.class,
+      responseType = org.apache.dubbo.benchmark.bean.PagePB.Response.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<org.apache.dubbo.benchmark.bean.PagePB.Request,
+      org.apache.dubbo.benchmark.bean.PagePB.Response> getGetUserMethod() {
+    io.grpc.MethodDescriptor<org.apache.dubbo.benchmark.bean.PagePB.Request, org.apache.dubbo.benchmark.bean.PagePB.Response> getGetUserMethod;
+    if ((getGetUserMethod = UserServiceGrpc.getGetUserMethod) == null) {
+      synchronized (UserServiceGrpc.class) {
+        if ((getGetUserMethod = UserServiceGrpc.getGetUserMethod) == null) {
+          UserServiceGrpc.getGetUserMethod = getGetUserMethod = 
+              io.grpc.MethodDescriptor.<org.apache.dubbo.benchmark.bean.PagePB.Request, org.apache.dubbo.benchmark.bean.PagePB.Response>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(
+                  "org.apache.dubbo.benchmark.bean.UserService", "getUser"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  org.apache.dubbo.benchmark.bean.PagePB.Request.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  org.apache.dubbo.benchmark.bean.PagePB.Response.getDefaultInstance()))
+                  .setSchemaDescriptor(new UserServiceMethodDescriptorSupplier("getUser"))
+                  .build();
+          }
+        }
+     }
+     return getGetUserMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<org.apache.dubbo.benchmark.bean.PagePB.Request,
+      org.apache.dubbo.benchmark.bean.PagePB.Response> getListUserMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "listUser",
+      requestType = org.apache.dubbo.benchmark.bean.PagePB.Request.class,
+      responseType = org.apache.dubbo.benchmark.bean.PagePB.Response.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<org.apache.dubbo.benchmark.bean.PagePB.Request,
+      org.apache.dubbo.benchmark.bean.PagePB.Response> getListUserMethod() {
+    io.grpc.MethodDescriptor<org.apache.dubbo.benchmark.bean.PagePB.Request, org.apache.dubbo.benchmark.bean.PagePB.Response> getListUserMethod;
+    if ((getListUserMethod = UserServiceGrpc.getListUserMethod) == null) {
+      synchronized (UserServiceGrpc.class) {
+        if ((getListUserMethod = UserServiceGrpc.getListUserMethod) == null) {
+          UserServiceGrpc.getListUserMethod = getListUserMethod = 
+              io.grpc.MethodDescriptor.<org.apache.dubbo.benchmark.bean.PagePB.Request, org.apache.dubbo.benchmark.bean.PagePB.Response>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(
+                  "org.apache.dubbo.benchmark.bean.UserService", "listUser"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  org.apache.dubbo.benchmark.bean.PagePB.Request.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  org.apache.dubbo.benchmark.bean.PagePB.Response.getDefaultInstance()))
+                  .setSchemaDescriptor(new UserServiceMethodDescriptorSupplier("listUser"))
+                  .build();
+          }
+        }
+     }
+     return getListUserMethod;
+  }
+
+  /**
+   * Creates a new async stub that supports all call types for the service
+   */
+  public static UserServiceStub newStub(io.grpc.Channel channel) {
+    return new UserServiceStub(channel);
+  }
+
+  /**
+   * Creates a new blocking-style stub that supports unary and streaming output calls on the service
+   */
+  public static UserServiceBlockingStub newBlockingStub(
+      io.grpc.Channel channel) {
+    return new UserServiceBlockingStub(channel);
+  }
+
+  /**
+   * Creates a new ListenableFuture-style stub that supports unary calls on the service
+   */
+  public static UserServiceFutureStub newFutureStub(
+      io.grpc.Channel channel) {
+    return new UserServiceFutureStub(channel);
+  }
+
+  /**
+   */
+  public static abstract class UserServiceImplBase implements io.grpc.BindableService {
+
+    /**
+     */
+    public void existUser(org.apache.dubbo.benchmark.bean.PagePB.Request request,
+        io.grpc.stub.StreamObserver<org.apache.dubbo.benchmark.bean.PagePB.Response> responseObserver) {
+      asyncUnimplementedUnaryCall(getExistUserMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void createUser(org.apache.dubbo.benchmark.bean.PagePB.Request request,
+        io.grpc.stub.StreamObserver<org.apache.dubbo.benchmark.bean.PagePB.Response> responseObserver) {
+      asyncUnimplementedUnaryCall(getCreateUserMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getUser(org.apache.dubbo.benchmark.bean.PagePB.Request request,
+        io.grpc.stub.StreamObserver<org.apache.dubbo.benchmark.bean.PagePB.Response> responseObserver) {
+      asyncUnimplementedUnaryCall(getGetUserMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void listUser(org.apache.dubbo.benchmark.bean.PagePB.Request request,
+        io.grpc.stub.StreamObserver<org.apache.dubbo.benchmark.bean.PagePB.Response> responseObserver) {
+      asyncUnimplementedUnaryCall(getListUserMethod(), responseObserver);
+    }
+
+    @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() {
+      return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
+          .addMethod(
+            getExistUserMethod(),
+            asyncUnaryCall(
+              new MethodHandlers<
+                org.apache.dubbo.benchmark.bean.PagePB.Request,
+                org.apache.dubbo.benchmark.bean.PagePB.Response>(
+                  this, METHODID_EXIST_USER)))
+          .addMethod(
+            getCreateUserMethod(),
+            asyncUnaryCall(
+              new MethodHandlers<
+                org.apache.dubbo.benchmark.bean.PagePB.Request,
+                org.apache.dubbo.benchmark.bean.PagePB.Response>(
+                  this, METHODID_CREATE_USER)))
+          .addMethod(
+            getGetUserMethod(),
+            asyncUnaryCall(
+              new MethodHandlers<
+                org.apache.dubbo.benchmark.bean.PagePB.Request,
+                org.apache.dubbo.benchmark.bean.PagePB.Response>(
+                  this, METHODID_GET_USER)))
+          .addMethod(
+            getListUserMethod(),
+            asyncUnaryCall(
+              new MethodHandlers<
+                org.apache.dubbo.benchmark.bean.PagePB.Request,
+                org.apache.dubbo.benchmark.bean.PagePB.Response>(
+                  this, METHODID_LIST_USER)))
+          .build();
+    }
+  }
+
+  /**
+   */
+  public static final class UserServiceStub extends io.grpc.stub.AbstractStub<UserServiceStub> {
+    private UserServiceStub(io.grpc.Channel channel) {
+      super(channel);
+    }
+
+    private UserServiceStub(io.grpc.Channel channel,
+        io.grpc.CallOptions callOptions) {
+      super(channel, callOptions);
+    }
+
+    @java.lang.Override
+    protected UserServiceStub build(io.grpc.Channel channel,
+        io.grpc.CallOptions callOptions) {
+      return new UserServiceStub(channel, callOptions);
+    }
+
+    /**
+     */
+    public void existUser(org.apache.dubbo.benchmark.bean.PagePB.Request request,
+        io.grpc.stub.StreamObserver<org.apache.dubbo.benchmark.bean.PagePB.Response> responseObserver) {
+      asyncUnaryCall(
+          getChannel().newCall(getExistUserMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void createUser(org.apache.dubbo.benchmark.bean.PagePB.Request request,
+        io.grpc.stub.StreamObserver<org.apache.dubbo.benchmark.bean.PagePB.Response> responseObserver) {
+      asyncUnaryCall(
+          getChannel().newCall(getCreateUserMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getUser(org.apache.dubbo.benchmark.bean.PagePB.Request request,
+        io.grpc.stub.StreamObserver<org.apache.dubbo.benchmark.bean.PagePB.Response> responseObserver) {
+      asyncUnaryCall(
+          getChannel().newCall(getGetUserMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void listUser(org.apache.dubbo.benchmark.bean.PagePB.Request request,
+        io.grpc.stub.StreamObserver<org.apache.dubbo.benchmark.bean.PagePB.Response> responseObserver) {
+      asyncUnaryCall(
+          getChannel().newCall(getListUserMethod(), getCallOptions()), request, responseObserver);
+    }
+  }
+
+  /**
+   */
+  public static final class UserServiceBlockingStub extends io.grpc.stub.AbstractStub<UserServiceBlockingStub> {
+    private UserServiceBlockingStub(io.grpc.Channel channel) {
+      super(channel);
+    }
+
+    private UserServiceBlockingStub(io.grpc.Channel channel,
+        io.grpc.CallOptions callOptions) {
+      super(channel, callOptions);
+    }
+
+    @java.lang.Override
+    protected UserServiceBlockingStub build(io.grpc.Channel channel,
+        io.grpc.CallOptions callOptions) {
+      return new UserServiceBlockingStub(channel, callOptions);
+    }
+
+    /**
+     */
+    public org.apache.dubbo.benchmark.bean.PagePB.Response existUser(org.apache.dubbo.benchmark.bean.PagePB.Request request) {
+      return blockingUnaryCall(
+          getChannel(), getExistUserMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public org.apache.dubbo.benchmark.bean.PagePB.Response createUser(org.apache.dubbo.benchmark.bean.PagePB.Request request) {
+      return blockingUnaryCall(
+          getChannel(), getCreateUserMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public org.apache.dubbo.benchmark.bean.PagePB.Response getUser(org.apache.dubbo.benchmark.bean.PagePB.Request request) {
+      return blockingUnaryCall(
+          getChannel(), getGetUserMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public org.apache.dubbo.benchmark.bean.PagePB.Response listUser(org.apache.dubbo.benchmark.bean.PagePB.Request request) {
+      return blockingUnaryCall(
+          getChannel(), getListUserMethod(), getCallOptions(), request);
+    }
+  }
+
+  /**
+   */
+  public static final class UserServiceFutureStub extends io.grpc.stub.AbstractStub<UserServiceFutureStub> {
+    private UserServiceFutureStub(io.grpc.Channel channel) {
+      super(channel);
+    }
+
+    private UserServiceFutureStub(io.grpc.Channel channel,
+        io.grpc.CallOptions callOptions) {
+      super(channel, callOptions);
+    }
+
+    @java.lang.Override
+    protected UserServiceFutureStub build(io.grpc.Channel channel,
+        io.grpc.CallOptions callOptions) {
+      return new UserServiceFutureStub(channel, callOptions);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<org.apache.dubbo.benchmark.bean.PagePB.Response> existUser(
+        org.apache.dubbo.benchmark.bean.PagePB.Request request) {
+      return futureUnaryCall(
+          getChannel().newCall(getExistUserMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<org.apache.dubbo.benchmark.bean.PagePB.Response> createUser(
+        org.apache.dubbo.benchmark.bean.PagePB.Request request) {
+      return futureUnaryCall(
+          getChannel().newCall(getCreateUserMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<org.apache.dubbo.benchmark.bean.PagePB.Response> getUser(
+        org.apache.dubbo.benchmark.bean.PagePB.Request request) {
+      return futureUnaryCall(
+          getChannel().newCall(getGetUserMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<org.apache.dubbo.benchmark.bean.PagePB.Response> listUser(
+        org.apache.dubbo.benchmark.bean.PagePB.Request request) {
+      return futureUnaryCall(
+          getChannel().newCall(getListUserMethod(), getCallOptions()), request);
+    }
+  }
+
+  private static final int METHODID_EXIST_USER = 0;
+  private static final int METHODID_CREATE_USER = 1;
+  private static final int METHODID_GET_USER = 2;
+  private static final int METHODID_LIST_USER = 3;
+
+  private static final class MethodHandlers<Req, Resp> implements
+      io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>,
+      io.grpc.stub.ServerCalls.ServerStreamingMethod<Req, Resp>,
+      io.grpc.stub.ServerCalls.ClientStreamingMethod<Req, Resp>,
+      io.grpc.stub.ServerCalls.BidiStreamingMethod<Req, Resp> {
+    private final UserServiceImplBase serviceImpl;
+    private final int methodId;
+
+    MethodHandlers(UserServiceImplBase serviceImpl, int methodId) {
+      this.serviceImpl = serviceImpl;
+      this.methodId = methodId;
+    }
+
+    @java.lang.Override
+    @java.lang.SuppressWarnings("unchecked")
+    public void invoke(Req request, io.grpc.stub.StreamObserver<Resp> responseObserver) {
+      switch (methodId) {
+        case METHODID_EXIST_USER:
+          serviceImpl.existUser((org.apache.dubbo.benchmark.bean.PagePB.Request) request,
+              (io.grpc.stub.StreamObserver<org.apache.dubbo.benchmark.bean.PagePB.Response>) responseObserver);
+          break;
+        case METHODID_CREATE_USER:
+          serviceImpl.createUser((org.apache.dubbo.benchmark.bean.PagePB.Request) request,
+              (io.grpc.stub.StreamObserver<org.apache.dubbo.benchmark.bean.PagePB.Response>) responseObserver);
+          break;
+        case METHODID_GET_USER:
+          serviceImpl.getUser((org.apache.dubbo.benchmark.bean.PagePB.Request) request,
+              (io.grpc.stub.StreamObserver<org.apache.dubbo.benchmark.bean.PagePB.Response>) responseObserver);
+          break;
+        case METHODID_LIST_USER:
+          serviceImpl.listUser((org.apache.dubbo.benchmark.bean.PagePB.Request) request,
+              (io.grpc.stub.StreamObserver<org.apache.dubbo.benchmark.bean.PagePB.Response>) responseObserver);
+          break;
+        default:
+          throw new AssertionError();
+      }
+    }
+
+    @java.lang.Override
+    @java.lang.SuppressWarnings("unchecked")
+    public io.grpc.stub.StreamObserver<Req> invoke(
+        io.grpc.stub.StreamObserver<Resp> responseObserver) {
+      switch (methodId) {
+        default:
+          throw new AssertionError();
+      }
+    }
+  }
+
+  private static abstract class UserServiceBaseDescriptorSupplier
+      implements io.grpc.protobuf.ProtoFileDescriptorSupplier, io.grpc.protobuf.ProtoServiceDescriptorSupplier {
+    UserServiceBaseDescriptorSupplier() {}
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.FileDescriptor getFileDescriptor() {
+      return org.apache.dubbo.benchmark.bean.PagePB.getDescriptor();
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.ServiceDescriptor getServiceDescriptor() {
+      return getFileDescriptor().findServiceByName("UserService");
+    }
+  }
+
+  private static final class UserServiceFileDescriptorSupplier
+      extends UserServiceBaseDescriptorSupplier {
+    UserServiceFileDescriptorSupplier() {}
+  }
+
+  private static final class UserServiceMethodDescriptorSupplier
+      extends UserServiceBaseDescriptorSupplier
+      implements io.grpc.protobuf.ProtoMethodDescriptorSupplier {
+    private final String methodName;
+
+    UserServiceMethodDescriptorSupplier(String methodName) {
+      this.methodName = methodName;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.MethodDescriptor getMethodDescriptor() {
+      return getServiceDescriptor().findMethodByName(methodName);
+    }
+  }
+
+  private static volatile io.grpc.ServiceDescriptor serviceDescriptor;
+
+  public static io.grpc.ServiceDescriptor getServiceDescriptor() {
+    io.grpc.ServiceDescriptor result = serviceDescriptor;
+    if (result == null) {
+      synchronized (UserServiceGrpc.class) {
+        result = serviceDescriptor;
+        if (result == null) {
+          serviceDescriptor = result = io.grpc.ServiceDescriptor.newBuilder(SERVICE_NAME)
+              .setSchemaDescriptor(new UserServiceFileDescriptorSupplier())
+              .addMethod(getExistUserMethod())
+              .addMethod(getCreateUserMethod())
+              .addMethod(getGetUserMethod())
+              .addMethod(getListUserMethod())
+              .build();
+        }
+      }
+    }
+    return result;
+  }
+}
diff --git a/benchmark-base/pom.xml b/benchmark-base/pom.xml
index 88cd301..0f9d365 100644
--- a/benchmark-base/pom.xml
+++ b/benchmark-base/pom.xml
@@ -11,5 +11,129 @@
 
     <artifactId>benchmark-base</artifactId>
 
+    <properties>
+        <dubbo.compiler.version>0.0.1</dubbo.compiler.version>
+        <grpc.version>1.19.0</grpc.version>
+    </properties>
 
+    <dependencies>
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java</artifactId>
+            <version>3.7.1</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java-util</artifactId>
+            <version>3.7.1</version>
+        </dependency>
+        <dependency>
+            <groupId>io.grpc</groupId>
+            <artifactId>grpc-netty</artifactId>
+            <version>${grpc.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.grpc</groupId>
+            <artifactId>grpc-netty-shaded</artifactId>
+            <version>${grpc.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.grpc</groupId>
+            <artifactId>grpc-protobuf</artifactId>
+            <version>${grpc.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.grpc</groupId>
+            <artifactId>grpc-stub</artifactId>
+            <version>${grpc.version}</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <extensions>
+            <extension>
+                <groupId>kr.motd.maven</groupId>
+                <artifactId>os-maven-plugin</artifactId>
+                <version>1.6.1</version>
+            </extension>
+        </extensions>
+        <plugins>
+            <plugin>
+                <groupId>org.xolstice.maven.plugins</groupId>
+                <artifactId>protobuf-maven-plugin</artifactId>
+                <version>0.5.1</version>
+                <configuration>
+                    <protocArtifact>com.google.protobuf:protoc:3.7.1:exe:${os.detected.classifier}</protocArtifact>
+                    <outputDirectory>build/generated/source/proto/main/java</outputDirectory>
+                    <clearOutputDirectory>false</clearOutputDirectory>
+                    <protocPlugins>
+                        <protocPlugin>
+                            <id>dubbo</id>
+                            <groupId>org.apache.dubbo</groupId>
+                            <artifactId>dubbo-compiler</artifactId>
+                            <version>${dubbo.compiler.version}</version>
+                            <mainClass>org.apache.dubbo.gen.dubbo.DubboGenerator</mainClass>
+                        </protocPlugin>
+                    </protocPlugins>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>compile</goal>
+                            <goal>test-compile</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <plugin>
+                <groupId>org.xolstice.maven.plugins</groupId>
+                <artifactId>protobuf-maven-plugin</artifactId>
+                <version>0.5.1</version>
+                <configuration>
+                    <protocArtifact>com.google.protobuf:protoc:3.7.1:exe:${os.detected.classifier}</protocArtifact>
+                    <pluginId>grpc-java</pluginId>
+                    <pluginArtifact>io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}</pluginArtifact>
+                    <outputDirectory>build/generated/source/proto/main/java</outputDirectory>
+                    <clearOutputDirectory>false</clearOutputDirectory>
+                    <protocPlugins>
+                        <protocPlugin>
+                            <id>dubbo-grpc</id>
+                            <groupId>org.apache.dubbo</groupId>
+                            <artifactId>dubbo-compiler</artifactId>
+                            <version>${dubbo.compiler.version}</version>
+                            <mainClass>org.apache.dubbo.gen.grpc.DubboGrpcGenerator</mainClass>
+                        </protocPlugin>
+                    </protocPlugins>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>compile</goal>
+                            <goal>compile-custom</goal>
+                            <goal>test-compile</goal>
+                            <goal>test-compile-custom</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>build-helper-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <phase>generate-sources</phase>
+                        <goals>
+                            <goal>add-source</goal>
+                        </goals>
+                        <configuration>
+                            <sources>
+                                <source>build/generated/source/proto/main/java</source>
+                            </sources>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
 </project>
\ No newline at end of file
diff --git a/benchmark-base/src/main/java/org/apache/dubbo/benchmark/bean/User.java b/benchmark-base/src/main/java/org/apache/dubbo/benchmark/bean/User.java
index cecb779..dd86d3f 100644
--- a/benchmark-base/src/main/java/org/apache/dubbo/benchmark/bean/User.java
+++ b/benchmark-base/src/main/java/org/apache/dubbo/benchmark/bean/User.java
@@ -6,6 +6,7 @@
 import java.util.List;
 
 public class User implements Serializable {
+
     private static final long serialVersionUID = 2566816725396650300L;
 
     private long id;
diff --git a/benchmark-base/src/main/java/org/apache/dubbo/benchmark/serialize/SerializationOptimizerImpl.java b/benchmark-base/src/main/java/org/apache/dubbo/benchmark/serialize/SerializationOptimizerImpl.java
index 505e1ee..a3ea369 100644
--- a/benchmark-base/src/main/java/org/apache/dubbo/benchmark/serialize/SerializationOptimizerImpl.java
+++ b/benchmark-base/src/main/java/org/apache/dubbo/benchmark/serialize/SerializationOptimizerImpl.java
@@ -10,7 +10,7 @@
 
 public class SerializationOptimizerImpl implements SerializationOptimizer {
     @Override
-    public Collection<Class> getSerializableClasses() {
+    public Collection<Class<?>> getSerializableClasses() {
         return Arrays.asList(User.class, Page.class, UserService.class);
     }
 }
diff --git a/benchmark-base/src/main/java/org/apache/dubbo/benchmark/service/GrpcUserServiceImpl.java b/benchmark-base/src/main/java/org/apache/dubbo/benchmark/service/GrpcUserServiceImpl.java
new file mode 100644
index 0000000..8eee596
--- /dev/null
+++ b/benchmark-base/src/main/java/org/apache/dubbo/benchmark/service/GrpcUserServiceImpl.java
@@ -0,0 +1,103 @@
+package org.apache.dubbo.benchmark.service;
+
+import com.google.protobuf.util.Timestamps;
+import io.grpc.stub.StreamObserver;
+import org.apache.dubbo.benchmark.bean.DubboUserServiceGrpc;
+import org.apache.dubbo.benchmark.bean.PagePB;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @author zhengzechao
+ * @date 2020-03-06
+ * Email ooczzoo@gmail.com
+ */
+public class GrpcUserServiceImpl extends DubboUserServiceGrpc.UserServiceImplBase {
+
+    @Override
+    public void existUser(PagePB.Request request, StreamObserver<PagePB.Response> responseObserver) {
+        String email = request.getEmail();
+        final PagePB.Response.Builder builder = PagePB.Response.newBuilder();
+        if (email == null || email.isEmpty()) {
+            builder.setState(true);
+        } else if (email.charAt(email.length() - 1) < '5') {
+            builder.setState(false);
+        }
+        builder.setState(true);
+        PagePB.Response response = builder.build();
+        responseObserver.onNext(response);
+        responseObserver.onCompleted();
+    }
+
+    @Override
+    public void createUser(PagePB.Request request, StreamObserver<PagePB.Response> responseObserver) {
+        final PagePB.Response.Builder builder = PagePB.Response.newBuilder();
+        if (request.getUser() == null) {
+            builder.setState(false);
+        } else {
+            builder.setState(true);
+        }
+        PagePB.Response response = builder.build();
+        responseObserver.onNext(response);
+        responseObserver.onCompleted();
+    }
+
+    @Override
+    public void getUser(PagePB.Request request, StreamObserver<PagePB.Response> responseObserver) {
+        final long id = request.getId();
+        final PagePB.User.Builder user = PagePB.User.newBuilder();
+        user.setId(id);
+        user.setName(new String("Doug Lea"));
+        user.setSex(1);
+        user.setBirthday(Timestamps.fromMillis(System.currentTimeMillis()));
+        user.setEmail(new String("dong.lea@gmail.com"));
+        user.setMobile(new String("18612345678"));
+        user.setAddress(new String("北京市 中关村 中关村大街1号 鼎好大厦 1605"));
+        user.setIcon(new String("https://www.baidu.com/img/bd_logo1.png"));
+        user.setStatus(1);
+        user.setCreateTime(Timestamps.fromMillis(System.currentTimeMillis()));
+        user.setUpdateTime(user.getCreateTime());
+        List<Integer> permissions = new ArrayList<Integer>(
+                Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 19, 88, 86, 89, 90, 91, 92));
+        user.addAllPermissions(permissions);
+        PagePB.Response response = PagePB.Response.newBuilder().setUser(user.build()).build();
+        responseObserver.onNext(response);
+        responseObserver.onCompleted();
+    }
+
+    @Override
+    public void listUser(PagePB.Request request, StreamObserver<PagePB.Response> responseObserver) {
+        final PagePB.Page.Builder page = PagePB.Page.newBuilder();
+        List<PagePB.User> userList = new ArrayList<>(15);
+
+        for (int i = 0; i < 15; i++) {
+            final PagePB.User.Builder user = PagePB.User.newBuilder();
+
+            user.setId(i);
+            user.setName(new String("Doug Lea"));
+            user.setSex(1);
+            user.setBirthday(Timestamps.fromMillis(System.currentTimeMillis()));
+            user.setEmail(new String("dong.lea@gmail.com"));
+            user.setMobile(new String("18612345678"));
+            user.setAddress(new String("北京市 中关村 中关村大街1号 鼎好大厦 1605"));
+            user.setIcon(new String("https://www.baidu.com/img/bd_logo1.png"));
+            user.setStatus(1);
+            user.setCreateTime(Timestamps.fromMillis(System.currentTimeMillis()));
+            user.setUpdateTime(user.getCreateTime());
+            List<Integer> permissions = new ArrayList<Integer>(
+                    Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 19, 88, 86, 89, 90, 91, 92));
+            user.addAllPermissions(permissions);
+            userList.add(user.build());
+        }
+
+        page.setPageNo(request.getPage());
+        page.setTotal(1000);
+        page.addAllUsers(userList);
+
+        PagePB.Response response = PagePB.Response.newBuilder().setPage(page.build()).build();
+        responseObserver.onNext(response);
+        responseObserver.onCompleted();
+    }
+}
diff --git a/benchmark-base/src/main/java/org/apache/dubbo/benchmark/service/PBUserServiceImpl.java b/benchmark-base/src/main/java/org/apache/dubbo/benchmark/service/PBUserServiceImpl.java
new file mode 100644
index 0000000..2bc3f93
--- /dev/null
+++ b/benchmark-base/src/main/java/org/apache/dubbo/benchmark/service/PBUserServiceImpl.java
@@ -0,0 +1,119 @@
+package org.apache.dubbo.benchmark.service;
+
+import com.google.protobuf.util.Timestamps;
+import org.apache.dubbo.benchmark.bean.PagePB;
+import org.apache.dubbo.benchmark.bean.UserServiceDubbo;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.CompletableFuture;
+
+/**
+ * @author zhengzechao
+ * @date 2020-03-06
+ * Email ooczzoo@gmail.com
+ */
+public class PBUserServiceImpl implements UserServiceDubbo.IUserService {
+
+    @Override
+    public PagePB.Response createUser(PagePB.Request request) {
+        final PagePB.Response.Builder builder = PagePB.Response.newBuilder();
+        if (request.getUser() == null) {
+            builder.setState(false);
+        } else {
+            builder.setState(true);
+        }
+        return builder.build();
+    }
+
+    @Override
+    public CompletableFuture<PagePB.Response> createUserAsync(PagePB.Request request) {
+        return null;
+    }
+
+    @Override
+    public PagePB.Response existUser(PagePB.Request request) {
+        String email = request.getEmail();
+        final PagePB.Response.Builder builder = PagePB.Response.newBuilder();
+        if (email == null || email.isEmpty()) {
+            builder.setState(true);
+        }else if (email.charAt(email.length() - 1) < '5') {
+            builder.setState(false);
+        }
+
+        builder.setState(true);
+        return builder.build();
+    }
+
+    @Override
+    public CompletableFuture<PagePB.Response> existUserAsync(PagePB.Request request) {
+        return null;
+    }
+
+    @Override
+    public PagePB.Response listUser(PagePB.Request request) {
+
+        final PagePB.Page.Builder page = PagePB.Page.newBuilder();
+        List<PagePB.User> userList = new ArrayList<>(15);
+
+        for (int i = 0; i < 15; i++) {
+            final PagePB.User.Builder user = PagePB.User.newBuilder();
+
+            user.setId(i);
+            user.setName(new String("Doug Lea"));
+            user.setSex(1);
+            user.setBirthday(Timestamps.fromMillis(System.currentTimeMillis()));
+            user.setEmail(new String("dong.lea@gmail.com"));
+            user.setMobile(new String("18612345678"));
+            user.setAddress(new String("北京市 中关村 中关村大街1号 鼎好大厦 1605"));
+            user.setIcon(new String("https://www.baidu.com/img/bd_logo1.png"));
+            user.setStatus(1);
+            user.setCreateTime(Timestamps.fromMillis(System.currentTimeMillis()));
+            user.setUpdateTime(user.getCreateTime());
+            List<Integer> permissions = new ArrayList<Integer>(
+                    Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 19, 88, 86, 89, 90, 91, 92));
+            user.addAllPermissions(permissions);
+            userList.add(user.build());
+        }
+
+        page.setPageNo(request.getPage());
+        page.setTotal(1000);
+        page.addAllUsers(userList);
+
+        return PagePB.Response.newBuilder().setPage(page.build()).build();
+    }
+
+    @Override
+    public CompletableFuture<PagePB.Response> listUserAsync(PagePB.Request request) {
+        return null;
+    }
+
+    @Override
+    public PagePB.Response getUser(PagePB.Request request) {
+        final long id = request.getId();
+        final PagePB.User.Builder user = PagePB.User.newBuilder();
+        user.setId(id);
+        user.setName(new String("Doug Lea"));
+        user.setSex(1);
+        user.setBirthday(Timestamps.fromMillis(System.currentTimeMillis()));
+        user.setEmail(new String("dong.lea@gmail.com"));
+        user.setMobile(new String("18612345678"));
+        user.setAddress(new String("北京市 中关村 中关村大街1号 鼎好大厦 1605"));
+        user.setIcon(new String("https://www.baidu.com/img/bd_logo1.png"));
+        user.setStatus(1);
+        user.setCreateTime(Timestamps.fromMillis(System.currentTimeMillis()));
+        user.setUpdateTime(user.getCreateTime());
+        List<Integer> permissions = new ArrayList<Integer>(
+                Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 19, 88, 86, 89, 90, 91, 92));
+        user.addAllPermissions(permissions);
+
+        return PagePB.Response.newBuilder().setUser(user.build()).build();
+    }
+
+    @Override
+    public CompletableFuture<PagePB.Response> getUserAsync(PagePB.Request request) {
+        return null;
+    }
+
+}
diff --git a/benchmark-base/src/main/java/org/apache/dubbo/benchmark/service/UserServiceImplPb.java b/benchmark-base/src/main/java/org/apache/dubbo/benchmark/service/UserServiceImplPb.java
new file mode 100644
index 0000000..8090c0c
--- /dev/null
+++ b/benchmark-base/src/main/java/org/apache/dubbo/benchmark/service/UserServiceImplPb.java
@@ -0,0 +1,91 @@
+//package org.apache.dubbo.benchmark.service;
+//
+//import com.google.protobuf.util.Timestamps;
+//import org.apache.dubbo.benchmark.bean.PagePB;
+//
+//import java.util.ArrayList;
+//import java.util.Arrays;
+//import java.util.List;
+//
+//
+//public class UserServiceImplPb implements UserServicePb {
+//    @Override
+//    public PagePB.Response createUser(PagePB.Request request) {
+//        final PagePB.Response.Builder builder = PagePB.Response.newBuilder();
+//        if (request.getUser() == null) {
+//            builder.setState(false);
+//        } else {
+//            builder.setState(true);
+//        }
+//        return builder.build();
+//    }
+//
+//    @Override
+//    public PagePB.Response existUser(PagePB.Request request) {
+//        String email = request.getEmail();
+//        final PagePB.Response.Builder builder = PagePB.Response.newBuilder();
+//        if (email == null || email.isEmpty()) {
+//            builder.setState(true);
+//        }else if (email.charAt(email.length() - 1) < '5') {
+//            builder.setState(false);
+//        }
+//
+//        builder.setState(true);
+//        return builder.build();
+//    }
+//
+//    @Override
+//    public PagePB.Response listUser(PagePB.Request request) {
+//
+//        final PagePB.Page.Builder page = PagePB.Page.newBuilder();
+//        List<PagePB.User> userList = new ArrayList<>(15);
+//
+//        for (int i = 0; i < 15; i++) {
+//            final PagePB.User.Builder user = PagePB.User.newBuilder();
+//
+//            user.setId(i);
+//            user.setName(new String("Doug Lea"));
+//            user.setSex(1);
+//            user.setBirthday(Timestamps.fromMillis(System.currentTimeMillis()));
+//            user.setEmail(new String("dong.lea@gmail.com"));
+//            user.setMobile(new String("18612345678"));
+//            user.setAddress(new String("北京市 中关村 中关村大街1号 鼎好大厦 1605"));
+//            user.setIcon(new String("https://www.baidu.com/img/bd_logo1.png"));
+//            user.setStatus(1);
+//            user.setCreateTime(Timestamps.fromMillis(System.currentTimeMillis()));
+//            user.setUpdateTime(user.getCreateTime());
+//            List<Integer> permissions = new ArrayList<Integer>(
+//                    Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 19, 88, 86, 89, 90, 91, 92));
+//            user.addAllPermissions(permissions);
+//            userList.add(user.build());
+//        }
+//
+//        page.setPageNo(request.getPage());
+//        page.setTotal(1000);
+//        page.addAllUsers(userList);
+//
+//        return PagePB.Response.newBuilder().setPage(page.build()).build();
+//    }
+//
+//    @Override
+//    public PagePB.Response getUser(PagePB.Request request) {
+//        final long id = request.getId();
+//        final PagePB.User.Builder user = PagePB.User.newBuilder();
+//        user.setId(id);
+//        user.setName(new String("Doug Lea"));
+//        user.setSex(1);
+//        user.setBirthday(Timestamps.fromMillis(System.currentTimeMillis()));
+//        user.setEmail(new String("dong.lea@gmail.com"));
+//        user.setMobile(new String("18612345678"));
+//        user.setAddress(new String("北京市 中关村 中关村大街1号 鼎好大厦 1605"));
+//        user.setIcon(new String("https://www.baidu.com/img/bd_logo1.png"));
+//        user.setStatus(1);
+//        user.setCreateTime(Timestamps.fromMillis(System.currentTimeMillis()));
+//        user.setUpdateTime(user.getCreateTime());
+//        List<Integer> permissions = new ArrayList<Integer>(
+//                Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 19, 88, 86, 89, 90, 91, 92));
+//        user.addAllPermissions(permissions);
+//
+//        return PagePB.Response.newBuilder().setUser(user.build()).build();
+//    }
+//}
diff --git a/benchmark-base/src/main/java/org/apache/dubbo/benchmark/service/UserServicePb.java b/benchmark-base/src/main/java/org/apache/dubbo/benchmark/service/UserServicePb.java
new file mode 100644
index 0000000..fb91063
--- /dev/null
+++ b/benchmark-base/src/main/java/org/apache/dubbo/benchmark/service/UserServicePb.java
@@ -0,0 +1,16 @@
+//package org.apache.dubbo.benchmark.service;
+//
+//import org.apache.dubbo.benchmark.bean.PagePB;
+//
+///**
+// * @author zhengzechao
+// * @date 2019/7/22
+// * Email ooczzoo@gmail.com
+// */
+//public interface UserServicePb {
+//    PagePB.Response createUser(PagePB.Request request);
+//    PagePB.Response existUser(PagePB.Request request);
+//    PagePB.Response listUser(PagePB.Request request);
+//    PagePB.Response getUser(PagePB.Request request);
+//
+//}
diff --git a/benchmark-base/src/main/proto/Page.proto b/benchmark-base/src/main/proto/Page.proto
new file mode 100644
index 0000000..89250eb
--- /dev/null
+++ b/benchmark-base/src/main/proto/Page.proto
@@ -0,0 +1,52 @@
+syntax = "proto3";
+package org.apache.dubbo.benchmark.bean;
+
+import public "google/protobuf/timestamp.proto";
+option java_package = "org.apache.dubbo.benchmark.bean";
+
+// PagePB是最外层的类,其中的message都变成了该类的内部类
+option java_outer_classname = "PagePB";
+
+//### 编译只会生成message,service生成需要借助grpc这样的插件
+message Page {
+    repeated User users = 1;
+    int32 pageNo = 2;
+    int32 total = 3;
+}
+
+message User {
+    int64 id = 1;
+    string name = 2;
+    int32 sex = 3;
+    google.protobuf.Timestamp birthday = 4;
+    string email = 5;
+    string mobile = 6;
+    string address = 7;
+    string icon = 8;
+    repeated int32 permissions = 9;
+    int32 status = 10;
+    google.protobuf.Timestamp createTime = 11;
+    google.protobuf.Timestamp updateTime = 12;
+
+}
+message Request {
+    int64 id = 1;
+    int32 page = 2;
+    User user = 3;
+    string email = 4;
+
+}
+
+message Response {
+    bool state = 1;
+    User user = 2;
+    Page page = 3;
+}
+
+service UserService {
+    rpc existUser (Request) returns (Response);
+    rpc createUser (Request) returns (Response);
+    rpc getUser (Request) returns (Response);
+    rpc listUser (Request) returns (Response);
+
+}
\ No newline at end of file
diff --git a/benchmark.sh b/benchmark.sh
index 4f83b75..ba1d83e 100755
--- a/benchmark.sh
+++ b/benchmark.sh
@@ -12,12 +12,6 @@
 }
 
 build() {
-    if [ ! -d dubbo-serialization-native-hessian ] && [[ ${PROJECT_DIR} = *native-hessian* ]]; then
-        git clone https://github.com/dubbo/dubbo-serialization-native-hessian.git
-        pushd dubbo-serialization-native-hessian
-        mvn clean install
-        popd
-    fi
     mvn --projects benchmark-base,client-base,server-base,${PROJECT_DIR} clean package
 }
 
diff --git a/client-base/src/main/java/org/apache/dubbo/Client.java b/client-base/src/main/java/org/apache/dubbo/Client.java
deleted file mode 100644
index ac457fc..0000000
--- a/client-base/src/main/java/org/apache/dubbo/Client.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.apache.dubbo;
-
-import org.apache.dubbo.benchmark.service.UserService;
-import org.springframework.context.support.ClassPathXmlApplicationContext;
-
-public class Client {
-    public static void main(String[] args) {
-        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("consumer.xml");
-        context.start();
-        UserService userService = (UserService) context.getBean("userService");
-        System.out.println("existUser: " + userService.existUser("user@acme.com"));
-        System.out.println("getUser: " + userService.getUser(1));
-        System.out.println("createUser: " + userService.createUser(userService.getUser(2)));
-        System.out.println("listUser: " + userService.listUser(1));
-    }
-}
diff --git a/client-base/src/main/java/org/apache/dubbo/benchmark/ClientGrpc.java b/client-base/src/main/java/org/apache/dubbo/benchmark/ClientGrpc.java
new file mode 100644
index 0000000..0e342b0
--- /dev/null
+++ b/client-base/src/main/java/org/apache/dubbo/benchmark/ClientGrpc.java
@@ -0,0 +1,121 @@
+package org.apache.dubbo.benchmark;
+
+import com.google.protobuf.util.Timestamps;
+import org.apache.dubbo.benchmark.bean.DubboUserServiceGrpc;
+import org.apache.dubbo.benchmark.bean.PagePB;
+import org.apache.dubbo.benchmark.bean.UserServiceDubbo;
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.BenchmarkMode;
+import org.openjdk.jmh.annotations.Mode;
+import org.openjdk.jmh.annotations.OutputTimeUnit;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.State;
+import org.openjdk.jmh.annotations.TearDown;
+import org.openjdk.jmh.runner.Runner;
+import org.openjdk.jmh.runner.options.ChainedOptionsBuilder;
+import org.openjdk.jmh.runner.options.Options;
+import org.openjdk.jmh.runner.options.OptionsBuilder;
+import org.openjdk.jmh.runner.options.TimeValue;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+
+@State(Scope.Benchmark)
+public class ClientGrpc {
+    private static final int CONCURRENCY = 32;
+
+    private final ClassPathXmlApplicationContext context;
+    private final DubboUserServiceGrpc.IUserService userService;
+    private final AtomicInteger counter = new AtomicInteger(0);
+
+    public ClientGrpc() {
+        context = new ClassPathXmlApplicationContext("consumer.xml");
+        context.start();
+        userService = (DubboUserServiceGrpc.IUserService) context.getBean("userService");
+    }
+
+
+    @TearDown
+    public void close() throws IOException {
+        context.close();
+    }
+
+    @Benchmark
+    @BenchmarkMode({Mode.Throughput, Mode.AverageTime, Mode.SampleTime})
+    @OutputTimeUnit(TimeUnit.MILLISECONDS)
+    public boolean existUser() throws Exception {
+        final int count = counter.getAndIncrement();
+        return userService.existUser(PagePB.Request.newBuilder().setEmail(String.valueOf(count)).build())
+                .getState();
+    }
+
+    @Benchmark
+    @BenchmarkMode({Mode.Throughput, Mode.AverageTime, Mode.SampleTime})
+    @OutputTimeUnit(TimeUnit.MILLISECONDS)
+    public boolean createUser() throws Exception {
+        final int count = counter.getAndIncrement();
+
+        final PagePB.User.Builder user = PagePB.User.newBuilder();
+        user.setId(count);
+        user.setName(new String("Doug Lea"));
+        user.setSex(1);
+        user.setBirthday(Timestamps.fromMillis(System.currentTimeMillis()));
+        user.setEmail(new String("dong.lea@gmail.com"));
+        user.setMobile(new String("18612345678"));
+        user.setAddress(new String("北京市 中关村 中关村大街1号 鼎好大厦 1605"));
+        user.setIcon(new String("https://www.baidu.com/img/bd_logo1.png"));
+        user.setStatus(1);
+        user.setCreateTime(Timestamps.fromMillis(System.currentTimeMillis()));
+        user.setUpdateTime(user.getCreateTime());
+        List<Integer> permissions = new ArrayList<Integer>(
+                Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 19, 88, 86, 89, 90, 91, 92));
+        user.addAllPermissions(permissions);
+        final PagePB.Request.Builder builder = PagePB.Request.newBuilder();
+        return userService.createUser(builder.setUser(user.build()).build()).getState();
+
+    }
+
+    @Benchmark
+    @BenchmarkMode({Mode.Throughput, Mode.AverageTime, Mode.SampleTime})
+    @OutputTimeUnit(TimeUnit.MILLISECONDS)
+    public PagePB.User getUser() throws Exception {
+        final int count = counter.getAndIncrement();
+        return userService.getUser(PagePB.Request.newBuilder().setId(count).build()).getUser();
+    }
+
+    @Benchmark
+    @BenchmarkMode({Mode.Throughput, Mode.AverageTime, Mode.SampleTime})
+    @OutputTimeUnit(TimeUnit.MILLISECONDS)
+    public PagePB.Page listUser() throws Exception {
+        final int count = counter.getAndIncrement();
+        return userService.listUser(PagePB.Request.newBuilder().setPage(count).build()).getPage();
+    }
+
+    public static void main(String[] args) throws Exception {
+        Options opt;
+        ChainedOptionsBuilder optBuilder = new OptionsBuilder()
+                .include(ClientGrpc.class.getSimpleName())
+                .warmupIterations(3)
+                .warmupTime(TimeValue.seconds(10))
+                .measurementIterations(3)
+                .measurementTime(TimeValue.seconds(10))
+                .threads(CONCURRENCY)
+                .forks(1);
+
+        opt = doOptions(optBuilder).build();
+        new Runner(opt).run();
+    }
+
+    private static ChainedOptionsBuilder doOptions(ChainedOptionsBuilder optBuilder) {
+        String output = System.getProperty("benchmark.output");
+        if (output != null && !output.trim().isEmpty()) {
+            optBuilder.output(output);
+        }
+        return optBuilder;
+    }
+}
diff --git a/client-base/src/main/java/org/apache/dubbo/benchmark/ClientPb.java b/client-base/src/main/java/org/apache/dubbo/benchmark/ClientPb.java
new file mode 100644
index 0000000..4341a75
--- /dev/null
+++ b/client-base/src/main/java/org/apache/dubbo/benchmark/ClientPb.java
@@ -0,0 +1,122 @@
+package org.apache.dubbo.benchmark;
+
+import com.google.protobuf.util.Timestamps;
+import org.apache.dubbo.benchmark.bean.PagePB;
+import org.apache.dubbo.benchmark.bean.UserServiceDubbo;
+import org.apache.dubbo.config.ProtocolConfig;
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.BenchmarkMode;
+import org.openjdk.jmh.annotations.Mode;
+import org.openjdk.jmh.annotations.OutputTimeUnit;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.State;
+import org.openjdk.jmh.annotations.TearDown;
+import org.openjdk.jmh.runner.Runner;
+import org.openjdk.jmh.runner.options.ChainedOptionsBuilder;
+import org.openjdk.jmh.runner.options.Options;
+import org.openjdk.jmh.runner.options.OptionsBuilder;
+import org.openjdk.jmh.runner.options.TimeValue;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+
+@State(Scope.Benchmark)
+public class ClientPb {
+    private static final int CONCURRENCY = 32;
+
+    private final ClassPathXmlApplicationContext context;
+    private final UserServiceDubbo.IUserService userService;
+    private final AtomicInteger counter = new AtomicInteger(0);
+
+    public ClientPb() {
+        context = new ClassPathXmlApplicationContext("consumer.xml");
+        context.start();
+        userService = (UserServiceDubbo.IUserService) context.getBean("userService");
+    }
+
+
+    @TearDown
+    public void close() throws IOException {
+        context.close();
+    }
+
+    @Benchmark
+    @BenchmarkMode({Mode.Throughput, Mode.AverageTime, Mode.SampleTime})
+    @OutputTimeUnit(TimeUnit.MILLISECONDS)
+    public boolean existUser() throws Exception {
+        final int count = counter.getAndIncrement();
+        return userService.existUser(PagePB.Request.newBuilder().setEmail(String.valueOf(count)).build())
+                .getState();
+    }
+
+    @Benchmark
+    @BenchmarkMode({Mode.Throughput, Mode.AverageTime, Mode.SampleTime})
+    @OutputTimeUnit(TimeUnit.MILLISECONDS)
+    public boolean createUser() throws Exception {
+        final int count = counter.getAndIncrement();
+
+        final PagePB.User.Builder user = PagePB.User.newBuilder();
+        user.setId(count);
+        user.setName(new String("Doug Lea"));
+        user.setSex(1);
+        user.setBirthday(Timestamps.fromMillis(System.currentTimeMillis()));
+        user.setEmail(new String("dong.lea@gmail.com"));
+        user.setMobile(new String("18612345678"));
+        user.setAddress(new String("北京市 中关村 中关村大街1号 鼎好大厦 1605"));
+        user.setIcon(new String("https://www.baidu.com/img/bd_logo1.png"));
+        user.setStatus(1);
+        user.setCreateTime(Timestamps.fromMillis(System.currentTimeMillis()));
+        user.setUpdateTime(user.getCreateTime());
+        List<Integer> permissions = new ArrayList<Integer>(
+                Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 19, 88, 86, 89, 90, 91, 92));
+        user.addAllPermissions(permissions);
+        final PagePB.Request.Builder builder = PagePB.Request.newBuilder();
+        return userService.createUser(builder.setUser(user.build()).build()).getState();
+
+    }
+
+    @Benchmark
+    @BenchmarkMode({Mode.Throughput, Mode.AverageTime, Mode.SampleTime})
+    @OutputTimeUnit(TimeUnit.MILLISECONDS)
+    public PagePB.User getUser() throws Exception {
+        final int count = counter.getAndIncrement();
+        return userService.getUser(PagePB.Request.newBuilder().setId(count).build()).getUser();
+    }
+
+    @Benchmark
+    @BenchmarkMode({Mode.Throughput, Mode.AverageTime, Mode.SampleTime})
+    @OutputTimeUnit(TimeUnit.MILLISECONDS)
+    public PagePB.Page listUser() throws Exception {
+        final int count = counter.getAndIncrement();
+        return userService.listUser(PagePB.Request.newBuilder().setPage(count).build()).getPage();
+    }
+
+    public static void main(String[] args) throws Exception {
+        Options opt;
+        ChainedOptionsBuilder optBuilder = new OptionsBuilder()
+                .include(ClientPb.class.getSimpleName())
+                .warmupIterations(3)
+                .warmupTime(TimeValue.seconds(10))
+                .measurementIterations(3)
+                .measurementTime(TimeValue.seconds(10))
+                .threads(CONCURRENCY)
+                .forks(1);
+
+        opt = doOptions(optBuilder).build();
+
+        new Runner(opt).run();
+    }
+
+    private static ChainedOptionsBuilder doOptions(ChainedOptionsBuilder optBuilder) {
+        String output = System.getProperty("benchmark.output");
+        if (output != null && !output.trim().isEmpty()) {
+            optBuilder.output(output);
+        }
+        return optBuilder;
+    }
+}
diff --git a/dubbo-avro-client/pom.xml b/dubbo-avro-client/pom.xml
index ea76927..845dd35 100644
--- a/dubbo-avro-client/pom.xml
+++ b/dubbo-avro-client/pom.xml
@@ -12,6 +12,11 @@
     <artifactId>dubbo-avro-client</artifactId>
     <dependencies>
         <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>client-base</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
             <groupId>org.apache.avro</groupId>
             <artifactId>avro</artifactId>
         </dependency>
@@ -19,6 +24,31 @@
     <build>
         <plugins>
             <plugin>
+                <groupId>org.apache.avro</groupId>
+                <artifactId>avro-maven-plugin</artifactId>
+                <version>1.9.0</version>
+                <executions>
+                    <execution>
+                        <phase>generate-sources</phase>
+                        <goals>
+                            <goal>schema</goal>
+                        </goals>
+                        <configuration>
+                            <sourceDirectory>${project.basedir}/src/main/avro/</sourceDirectory>
+                            <outputDirectory>${project.basedir}/src/main/java/</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                </configuration>
+            </plugin>
+            <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-dependency-plugin</artifactId>
                 <inherited>true</inherited>
diff --git a/dubbo-avro-server/pom.xml b/dubbo-avro-server/pom.xml
index ba3e693..969c310 100644
--- a/dubbo-avro-server/pom.xml
+++ b/dubbo-avro-server/pom.xml
@@ -13,6 +13,11 @@
 
     <dependencies>
         <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>server-base</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
             <groupId>org.apache.avro</groupId>
             <artifactId>avro</artifactId>
         </dependency>
@@ -20,6 +25,31 @@
     <build>
         <plugins>
             <plugin>
+                <groupId>org.apache.avro</groupId>
+                <artifactId>avro-maven-plugin</artifactId>
+                <version>1.9.0</version>
+                <executions>
+                    <execution>
+                        <phase>generate-sources</phase>
+                        <goals>
+                            <goal>schema</goal>
+                        </goals>
+                        <configuration>
+                            <sourceDirectory>${project.basedir}/src/main/avro/</sourceDirectory>
+                            <outputDirectory>${project.basedir}/src/main/java/</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                </configuration>
+            </plugin>
+            <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-dependency-plugin</artifactId>
             </plugin>
diff --git a/dubbo-fastjson-client/pom.xml b/dubbo-fastjson-client/pom.xml
index 8846b59..ff70c44 100644
--- a/dubbo-fastjson-client/pom.xml
+++ b/dubbo-fastjson-client/pom.xml
@@ -13,6 +13,11 @@
 
     <dependencies>
         <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>client-base</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>fastjson</artifactId>
             <version>1.2.58</version>
@@ -31,7 +36,7 @@
                 <configuration>
                     <archive>
                         <manifest>
-                            <mainClass>org.apache.dubbo.benchmark.Server</mainClass>
+                            <mainClass>org.apache.dubbo.benchmark.Client</mainClass>
                         </manifest>
                     </archive>
                 </configuration>
diff --git a/dubbo-fastjson-server/pom.xml b/dubbo-fastjson-server/pom.xml
index 5654d8d..f98d491 100644
--- a/dubbo-fastjson-server/pom.xml
+++ b/dubbo-fastjson-server/pom.xml
@@ -13,6 +13,11 @@
 
     <dependencies>
         <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>server-base</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>fastjson</artifactId>
             <version>1.2.58</version>
diff --git a/dubbo-grpc-client/pom.xml b/dubbo-grpc-client/pom.xml
new file mode 100644
index 0000000..df490e7
--- /dev/null
+++ b/dubbo-grpc-client/pom.xml
@@ -0,0 +1,52 @@
+<?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>dubbo-benchmark</artifactId>
+        <groupId>org.apache.dubbo</groupId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>dubbo-grpc-client</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java</artifactId>
+            <version>3.7.1</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java-util</artifactId>
+            <version>3.7.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>client-base</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <configuration>
+                    <archive>
+                        <manifest>
+                            <mainClass>org.apache.dubbo.benchmark.ClientGrpc</mainClass>
+                        </manifest>
+                    </archive>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>
\ No newline at end of file
diff --git a/dubbo-grpc-client/src/main/resources/consumer.xml b/dubbo-grpc-client/src/main/resources/consumer.xml
new file mode 100644
index 0000000..d6a42d5
--- /dev/null
+++ b/dubbo-grpc-client/src/main/resources/consumer.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
+       xmlns:context="http://www.springframework.org/schema/context"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
+    <context:property-placeholder location="classpath:benchmark.properties" system-properties-mode="OVERRIDE"/>
+    <dubbo:application name="dubbo-grpc-client"/>
+    <dubbo:reference scope="remote" id="userService" check="false"
+                     interface="org.apache.dubbo.benchmark.bean.DubboUserServiceGrpc$IUserService"
+                     url="grpc://${server.host}:${server.port}" protocol="grpc"/>
+</beans>
\ No newline at end of file
diff --git a/dubbo-grpc-server/pom.xml b/dubbo-grpc-server/pom.xml
new file mode 100644
index 0000000..80e3a3f
--- /dev/null
+++ b/dubbo-grpc-server/pom.xml
@@ -0,0 +1,52 @@
+<?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>dubbo-benchmark</artifactId>
+        <groupId>org.apache.dubbo</groupId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>dubbo-grpc-server</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>server-base</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java</artifactId>
+            <version>3.7.1</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java-util</artifactId>
+            <version>3.7.1</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <configuration>
+                    <archive>
+                        <manifest>
+                            <mainClass>org.apache.dubbo.benchmark.Server</mainClass>
+                        </manifest>
+                    </archive>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>
\ No newline at end of file
diff --git a/dubbo-grpc-server/src/main/resources/provider.xml b/dubbo-grpc-server/src/main/resources/provider.xml
new file mode 100644
index 0000000..c797e6a
--- /dev/null
+++ b/dubbo-grpc-server/src/main/resources/provider.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
+       xmlns:context="http://www.springframework.org/schema/context"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
+    <context:property-placeholder location="classpath:benchmark.properties" system-properties-mode="OVERRIDE"/>
+    <dubbo:application name="dubbo-pb-server"/>
+    <dubbo:protocol name="grpc" host="${server.host}" server="netty4" port="${server.port}"/>
+    <dubbo:registry address="N/A"/>
+    <dubbo:service interface="org.apache.dubbo.benchmark.bean.DubboUserServiceGrpc$IUserService" ref="userService" filter="-default" serialization="protobuf"/>
+    <bean id="userService" class="org.apache.dubbo.benchmark.service.GrpcUserServiceImpl"/>
+</beans>
\ No newline at end of file
diff --git a/dubbo-gson-client/pom.xml b/dubbo-gson-client/pom.xml
index 98d29bd..d342f06 100644
--- a/dubbo-gson-client/pom.xml
+++ b/dubbo-gson-client/pom.xml
@@ -11,6 +11,13 @@
 
     <artifactId>dubbo-gson-client</artifactId>
 
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>client-base</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
     <build>
         <plugins>
             <plugin>
diff --git a/dubbo-gson-server/pom.xml b/dubbo-gson-server/pom.xml
index 09a58f9..1fd31e1 100644
--- a/dubbo-gson-server/pom.xml
+++ b/dubbo-gson-server/pom.xml
@@ -10,6 +10,13 @@
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>dubbo-gson-server</artifactId>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>server-base</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
 
     <build>
         <plugins>
@@ -24,7 +31,7 @@
                 <configuration>
                     <archive>
                         <manifest>
-                            <mainClass>org.apache.dubbo.benchmark.Client</mainClass>
+                            <mainClass>org.apache.dubbo.benchmark.Server</mainClass>
                         </manifest>
                     </archive>
                 </configuration>
diff --git a/dubbo-native-hessian-client/pom.xml b/dubbo-native-hessian-client/pom.xml
index f172c50..6a43d3d 100644
--- a/dubbo-native-hessian-client/pom.xml
+++ b/dubbo-native-hessian-client/pom.xml
@@ -17,12 +17,14 @@
             <artifactId>client-base</artifactId>
             <version>${project.version}</version>
         </dependency>
-
         <dependency>
-            <groupId>org.apache.dubbo</groupId>
-            <artifactId>dubbo-serialization-native-hession</artifactId>
-            <version>${dubbo.version}</version>
+            <groupId>com.caucho</groupId>
+            <artifactId>hessian</artifactId>
         </dependency>
+<!--        <dependency>-->
+<!--            <groupId>org.apache.dubbo</groupId>-->
+<!--            <artifactId>dubbo-serialization-native-hession</artifactId>-->
+<!--        </dependency>-->
     </dependencies>
 
     <build>
diff --git a/dubbo-native-hessian-server/pom.xml b/dubbo-native-hessian-server/pom.xml
index c1421b8..9d9a8cb 100644
--- a/dubbo-native-hessian-server/pom.xml
+++ b/dubbo-native-hessian-server/pom.xml
@@ -18,10 +18,15 @@
             <version>${project.version}</version>
         </dependency>
 
+
         <dependency>
-            <groupId>org.apache.dubbo</groupId>
-            <artifactId>dubbo-serialization-native-hession</artifactId>
+            <groupId>com.caucho</groupId>
+            <artifactId>hessian</artifactId>
         </dependency>
+<!--        <dependency>-->
+<!--            <groupId>org.apache.dubbo</groupId>-->
+<!--            <artifactId>dubbo-serialization-native-hession</artifactId>-->
+<!--        </dependency>-->
     </dependencies>
 
     <build>
diff --git a/dubbo-pb-client/pom.xml b/dubbo-pb-client/pom.xml
new file mode 100644
index 0000000..fc6ee5e
--- /dev/null
+++ b/dubbo-pb-client/pom.xml
@@ -0,0 +1,52 @@
+<?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>dubbo-benchmark</artifactId>
+        <groupId>org.apache.dubbo</groupId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>dubbo-pb-client</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java</artifactId>
+            <version>3.7.1</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java-util</artifactId>
+            <version>3.7.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>client-base</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <configuration>
+                    <archive>
+                        <manifest>
+                            <mainClass>org.apache.dubbo.benchmark.ClientPb</mainClass>
+                        </manifest>
+                    </archive>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>
\ No newline at end of file
diff --git a/dubbo-pb-client/src/main/resources/consumer.xml b/dubbo-pb-client/src/main/resources/consumer.xml
new file mode 100644
index 0000000..bd5a848
--- /dev/null
+++ b/dubbo-pb-client/src/main/resources/consumer.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
+       xmlns:context="http://www.springframework.org/schema/context"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
+    <context:property-placeholder location="classpath:benchmark.properties" system-properties-mode="OVERRIDE"/>
+    <dubbo:application name="dubbo-pb-client"/>
+    <dubbo:reference id="userService" check="false"
+                     interface="org.apache.dubbo.benchmark.bean.UserServiceDubbo$IUserService"
+                     url="dubbo://${server.host}:${server.port}"/>
+    <dubbo:consumer client="netty4" filter="-default"/>
+</beans>
\ No newline at end of file
diff --git a/dubbo-pb-server/pom.xml b/dubbo-pb-server/pom.xml
new file mode 100644
index 0000000..3b9f4cc
--- /dev/null
+++ b/dubbo-pb-server/pom.xml
@@ -0,0 +1,52 @@
+<?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>dubbo-benchmark</artifactId>
+        <groupId>org.apache.dubbo</groupId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>dubbo-pb-server</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>server-base</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java</artifactId>
+            <version>3.7.1</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java-util</artifactId>
+            <version>3.7.1</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <configuration>
+                    <archive>
+                        <manifest>
+                            <mainClass>org.apache.dubbo.benchmark.Server</mainClass>
+                        </manifest>
+                    </archive>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>
\ No newline at end of file
diff --git a/dubbo-pb-server/src/main/resources/provider.xml b/dubbo-pb-server/src/main/resources/provider.xml
new file mode 100644
index 0000000..0d4f790
--- /dev/null
+++ b/dubbo-pb-server/src/main/resources/provider.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
+       xmlns:context="http://www.springframework.org/schema/context"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
+    <context:property-placeholder location="classpath:benchmark.properties" system-properties-mode="OVERRIDE"/>
+    <dubbo:application name="dubbo-pb-server"/>
+    <dubbo:protocol name="dubbo" host="${server.host}" server="netty4" port="${server.port}"/>
+    <dubbo:registry address="N/A"/>
+    <dubbo:service interface="org.apache.dubbo.benchmark.bean.UserServiceDubbo$IUserService" ref="userService" filter="-default" serialization="protobuf"/>
+    <bean id="userService" class="org.apache.dubbo.benchmark.service.PBUserServiceImpl"/>
+</beans>
\ No newline at end of file
diff --git a/dubbo-protobuf-json-client/pom.xml b/dubbo-protobuf-json-client/pom.xml
new file mode 100644
index 0000000..cfccef4
--- /dev/null
+++ b/dubbo-protobuf-json-client/pom.xml
@@ -0,0 +1,51 @@
+<?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>dubbo-benchmark</artifactId>
+        <groupId>org.apache.dubbo</groupId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>dubbo-protobuf-json-client</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java</artifactId>
+            <version>3.7.1</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java-util</artifactId>
+            <version>3.7.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>client-base</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <configuration>
+                    <archive>
+                        <manifest>
+                            <mainClass>org.apache.dubbo.benchmark.ClientPb</mainClass>
+                        </manifest>
+                    </archive>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>
\ No newline at end of file
diff --git a/dubbo-protobuf-json-client/src/main/resources/consumer.xml b/dubbo-protobuf-json-client/src/main/resources/consumer.xml
new file mode 100644
index 0000000..10342d5
--- /dev/null
+++ b/dubbo-protobuf-json-client/src/main/resources/consumer.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
+       xmlns:context="http://www.springframework.org/schema/context"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
+    <context:property-placeholder location="classpath:benchmark.properties" system-properties-mode="OVERRIDE"/>
+    <dubbo:application name="dubbo-protostuff-client"/>
+    <dubbo:reference id="userService" check="false"
+                     interface="org.apache.dubbo.benchmark.bean.UserServiceDubbo$IUserService"
+                     url="dubbo://${server.host}:${server.port}?serialization=protobuf-json"/>
+    <dubbo:consumer client="netty4" filter="-default"/>
+</beans>
\ No newline at end of file
diff --git a/dubbo-protobuf-json-server/pom.xml b/dubbo-protobuf-json-server/pom.xml
new file mode 100644
index 0000000..c8b0601
--- /dev/null
+++ b/dubbo-protobuf-json-server/pom.xml
@@ -0,0 +1,51 @@
+<?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>dubbo-benchmark</artifactId>
+        <groupId>org.apache.dubbo</groupId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>dubbo-protobuf-json-server</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java</artifactId>
+            <version>3.7.1</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java-util</artifactId>
+            <version>3.7.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>server-base</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <configuration>
+                    <archive>
+                        <manifest>
+                            <mainClass>org.apache.dubbo.benchmark.Server</mainClass>
+                        </manifest>
+                    </archive>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>
\ No newline at end of file
diff --git a/dubbo-protobuf-json-server/src/main/resources/provider.xml b/dubbo-protobuf-json-server/src/main/resources/provider.xml
new file mode 100644
index 0000000..7b426d5
--- /dev/null
+++ b/dubbo-protobuf-json-server/src/main/resources/provider.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
+       xmlns:context="http://www.springframework.org/schema/context"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
+    <context:property-placeholder location="classpath:benchmark.properties" system-properties-mode="OVERRIDE"/>
+    <dubbo:application name="dubbo-protostuff-server"/>
+    <dubbo:protocol name="dubbo" host="${server.host}" server="netty4" port="${server.port}"
+                    serialization="protobuf-json"/>
+    <dubbo:registry address="N/A"/>
+    <dubbo:service interface="org.apache.dubbo.benchmark.bean.UserServiceDubbo$IUserService" ref="userService" filter="-default"/>
+    <bean id="userService" class="org.apache.dubbo.benchmark.service.PBUserServiceImpl"/>
+</beans>
\ No newline at end of file
diff --git a/dubbo-protostuff-client/pom.xml b/dubbo-protostuff-client/pom.xml
index 55b0c95..0480b8c 100644
--- a/dubbo-protostuff-client/pom.xml
+++ b/dubbo-protostuff-client/pom.xml
@@ -12,6 +12,11 @@
     <artifactId>dubbo-protostuff-client</artifactId>
 
     <dependencies>
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>client-base</artifactId>
+            <version>${project.version}</version>
+        </dependency>
         <!-- Protostuff -->
         <dependency>
             <groupId>io.protostuff</groupId>
diff --git a/dubbo-protostuff-server/pom.xml b/dubbo-protostuff-server/pom.xml
index 2ff8a28..dd0d37a 100644
--- a/dubbo-protostuff-server/pom.xml
+++ b/dubbo-protostuff-server/pom.xml
@@ -12,6 +12,11 @@
     <artifactId>dubbo-protostuff-server</artifactId>
 
     <dependencies>
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>server-base</artifactId>
+            <version>${project.version}</version>
+        </dependency>
         <!-- Protostuff -->
         <dependency>
             <groupId>io.protostuff</groupId>
diff --git a/pom.xml b/pom.xml
index 783d373..447b85a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,7 +12,7 @@
     <properties>
         <java.source>1.8</java.source>
         <java.target>1.8</java.target>
-        <dubbo.version>2.7.2</dubbo.version>
+        <dubbo.version>2.7.6</dubbo.version>
         <netty.version>4.1.25.Final</netty.version>
         <kryo.version>4.0.2</kryo.version>
         <kryo-serializers.version>0.42</kryo-serializers.version>
@@ -21,6 +21,7 @@
         <slf4j.version>1.7.25</slf4j.version>
         <logback.version>1.2.3</logback.version>
         <junit.version>4.12</junit.version>
+        <cli.version>1.4</cli.version>
     </properties>
 
     <modules>
@@ -43,6 +44,13 @@
         <module>dubbo-protostuff-client</module>
         <module>dubbo-gson-server</module>
         <module>dubbo-gson-client</module>
+        <module>dubbo-protobuf-json-server</module>
+        <module>dubbo-protobuf-json-client</module>
+        <module>dubbo-pb-server</module>
+        <module>dubbo-pb-client</module>
+        <module>dubbo-grpc-server</module>
+        <module>dubbo-grpc-client</module>
+
     </modules>
 
     <dependencies>
@@ -67,6 +75,11 @@
             <groupId>ch.qos.logback</groupId>
             <artifactId>logback-classic</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>commons-cli</groupId>
+            <artifactId>commons-cli</artifactId>
+        </dependency>
     </dependencies>
 
     <dependencyManagement>
@@ -76,21 +89,24 @@
                 <groupId>org.apache.dubbo</groupId>
                 <artifactId>dubbo-dependencies-bom</artifactId>
                 <version>${dubbo.version}</version>
-               <type>pom</type>
+                <type>pom</type>
                 <scope>import</scope>
             </dependency>
-
             <dependency>
                 <groupId>io.netty</groupId>
                 <artifactId>netty-all</artifactId>
                 <version>${netty.version}</version>
             </dependency>
-
             <dependency>
                 <groupId>de.javakaffee</groupId>
                 <artifactId>kryo-serializers</artifactId>
                 <version>${kryo-serializers.version}</version>
             </dependency>
+            <dependency>
+                <groupId>org.apache.dubbo</groupId>
+                <artifactId>dubbo-protobuf-json-server</artifactId>
+                <version>${dubbo.version}</version>
+            </dependency>
 
             <dependency>
                 <groupId>com.esotericsoftware</groupId>
@@ -139,6 +155,12 @@
                 <artifactId>dubbo-serialization-native-hession</artifactId>
                 <version>${dubbo.version}</version>
             </dependency>
+
+            <dependency>
+                <groupId>commons-cli</groupId>
+                <artifactId>commons-cli</artifactId>
+                <version>${cli.version}</version>
+            </dependency>
         </dependencies>
     </dependencyManagement>