基于Protobuf的RPC Server 0.1版发布
程序员文章站
2022-04-17 10:41:50
...
Fepss致力于免费OA的开发和推广,利用免费OA系统推动中国中小型企业信息化的发展,FEPSS公司同时积极参如开源发展,日前FEPSS公司将其核心的RPC Server进行了开源。
FEPSS RPC Server是负责整个系统的后台核心服务,利用Google的Protobuf协议、Apache的高性能网络库 Mina、Tapestry5-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
上一篇: 经期四个排毒诀窍 畅通经血排清毒素
下一篇: 白芍的功效与医疗作用