项目作者: To-echo

项目描述 :
基于netty和tcp的rpc调用框架
高级语言: Java
项目地址: git://github.com/To-echo/lrpc-all.git
创建时间: 2018-10-30T11:58:26Z
项目社区:https://github.com/To-echo/lrpc-all

开源协议:

下载


lrpc-all

基于netty和tcp的rpc调用框架

使用到技术

SpringBoot 1.5.2、protosbuff 1.5.2、Netty4.0

用例

  1. clone 源码,build jar到本地仓库

  2. 源码中带有spring-boot-web 1.5.2的jar包,因此可直接使用SpringBoot

  3. 发布一个服务,在类上用@RpcService 标识,value值,为rpc方法的唯一标识,不能重复!

  1. @RpcService("HelloService")
  2. public class HelloServiceImpl implements HelloService {
  3. @Override
  4. public String say(String msg) {
  5. return "Hello Word!" + msg;
  6. }
  7. }
  1. 将rpc服务需要绑定的端口号写入spring的enviroment中,如:lrpc.server=8888

  2. client端只需要配置一个执行的LrpcExecutor就ok,里面包含请求服务的host和port,如下:

  1. lrpc.hello.host=127.0.0.1
  2. lrpc.hello.port=8888
  3. lrpc.hello.desc=hello rpc调用
  1. 配置Executor
  1. @Configuration
  2. @Component
  3. public class RpcConfiguration {
  4. @Bean("rpc.hello")
  5. @ConfigurationProperties(prefix = "lrpc.hello")
  6. public RpcServerProperties rpcClientCallProperties() {
  7. return new RpcServerProperties();
  8. }
  9. @Bean("helloRpcExecutor")
  10. LrpcExecutor lrpcExecutor(@Qualifier(value = "rpc.hello") RpcServerProperties rpcServerProperties) {
  11. return invoke(rpcServerProperties);
  12. }
  13. private LrpcExecutor invoke(RpcServerProperties config) {
  14. return new LrpcExecutorImpl(config.getHost(), config.getPort());
  15. }
  16. }
  1. 调用,RpcRequest请求类中的className为@RpcService中的value,methodName为@RpcService标识的类中的方法名
  1. @Autowired
  2. @Qualifier(value = "helloRpcExecutor")
  3. private LrpcExecutor helloRpcExecutor;
  4. @GetMapping("/say")
  5. public String invoke(String msg) {
  6. RpcRequest rpcRequest = new RpcRequest();
  7. rpcRequest.setClassName("HelloService");
  8. rpcRequest.setMethodName("say");
  9. rpcRequest.setId(111L);
  10. HashMap<Class<?>, Object> arguments = new HashMap<>(8);
  11. arguments.put(String.class, "good");
  12. rpcRequest.setArguments(arguments);
  13. RpcResponse execute = helloRpcExecutor.execute(rpcRequest);
  14. System.out.println(execute.toString());
  15. return execute.toString();
  16. }
  17. .....

最后,以上为个人练手demo,未来有时间会把未完善的地方慢慢完善,最终目标是做成像Dubbo那样的pj,如有好的意见或疑惑欢迎各位大佬指点(morty630@foxmail.com