欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  资讯频道

基于Protobuf的RPC Server 0.1版发布

程序员文章站 2022-04-17 10:41:50
...

        Fepss致力于免费OA的开发和推广,利用免费OA系统推动中国中小型企业信息化的发展,FEPSS公司同时积极参如开源发展,日前FEPSS公司将其核心的RPC Server进行了开源。
        FEPSS RPC Server是负责整个系统的后台核心服务,利用Google的Protobuf协议、Apache的高性能网络库 MinaTapestry5-IOC.在普通的2G内存、2.4G的CPU的笔记本上能达到并发10K的请求,已经平稳运行在系统中,支撑整个系统的多项服务。

   FEPSS RPC Server 项目信息:
   source: http://github.com/bitiboy/fepss-rpc/tree
   download: http://github.com/bitiboy/fepss-rpc/downloads


快速上手指南:

       通过查看RpcApplicationTest.java可以了解具体的实现方法
1) 定义你的RPC服务类,例如: test.proto

package protobuf.socketrpc;

option java_package = "com.fepss.rpc.test";
option java_outer_classname = "TestProto";

message User{
  optional string userName=1;
}
message Result{
  optional string result=1;
  optional bool success=2;
}

service TestService {
  rpc TestMethod(User) returns(Result);
}
 



2) 使用Google的protoc来产生服务接口
protoc test.proto --java_out .

3) 实现你的服务方法.

public class TestServiceImpl extends TestService{

  @Override
  public void testMethod(RpcController controller, User request,
      RpcCallback<Result> done) {
    Builder builder =Result.newBuilder().setResult("get user"+request.getUserName());
    builder.setSuccess(true);
    done.run(builder.build());
  }
}
   


4) 运行一个远程调用测试,RpcApplicationTest.java

@Test
  public void testRpc() throws IOException{
    RpcApplication application = new RpcApplication(TestModule.class);
    try{
      application.start();
      // create client to call rpc
      RpcChannelImpl channel = new RpcChannelImpl(RpcConstants.DEFAULT_HOST,RpcConstants.DEFAULT_PORT);
      RpcController controller = channel.newRpcController();
      Stub service = TestService.newStub(channel);
      // request data
      String reqdata = "Request Data";
      User request = User.newBuilder().setUserName(reqdata).build();

      // response callback
      RpcCallback<Result> done = new RpcCallback<Result>() {
        @Override
        public void run(Result result) {
          Assert.assertEquals(result.getResult(),
              "get userRequest Data");
          Assert.assertTrue(result.getSuccess());

        }
      };
      // execute remote method
      service.testMethod(controller, request, done);
      Assert.assertFalse(controller.failed());
      Assert.assertEquals(controller.errorText(), null);
    }finally{
      application.stop();
    }
    
  }
  public static class TestModule{
    public static void contributeIoHandler(MappedConfiguration<String,Service> configruation){
      configruation.add(TestService.getDescriptor().getFullName(),new TestServiceImpl());
    }
  }
   

5)欢迎反馈  jcai AT Fepss.com