# rpc **Repository Path**: zippo2/rpc ## Basic Information - **Project Name**: rpc - **Description**: 轻量级分布式 RPC 框架 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: https://my.oschina.net/huangyong/blog/361751 - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 529 - **Created**: 2018-04-04 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 分布式 RPC 框架 - 使用说明 当前版本:1.3.0 发布日期:20151206 发布日志参见 `RELEASE.md` 文档 ## 定义 RPC 接口 > 参见 rpc-sample-api 模块 ```java package com.xxx.rpc.sample.api; public interface HelloService { String hello(String name); } ``` 需要将 RPC 接口与 RPC 实现分别存放在不同的模块中 ## 发布 RPC 服务 > 参见 rpc-sample-server 模块 ### 第一步:添加 Maven 依赖 #### pom.xml ```xml com.xxx.rpc rpc-sample-api ${version.rpc} com.xxx.rpc rpc-server ${version.rpc} ``` - RPC Sample API:RPC 接口所在模块的依赖 - RPC Server:RPC 服务端框架的依赖 ### 第二步:实现 RPC 接口 ```java package com.xxx.rpc.sample.server; import com.xxx.rpc.sample.api.HelloService; import com.xxx.rpc.server.RpcService; @RpcService(HelloService.class) public class HelloServiceImpl implements HelloService { @Override public String hello(String name) { return "Hello! " + name; } } ``` - 必须在 RpcService 注解中指定 RPC 接口 - 若 RPC 接口拥有多个实现类,则需要在 RpcService 注解中指定 version 属性加以区分 ### 第三步:配置 RPC 服务端 #### spring.xml ```xml ``` - Service Registry:用于服务注册,若使用 ZooKeeper 实现,则需提供 ZooKeeper 地址、系统名、实例号 - RPC Server:用于发布 RPC 服务,需要提供服务器端口 注册到 ZooKeeper 中的 ZNode 路径为:`registry/service/address`,前 2 个节点是持久的,最后 1 个节点是临时的 #### rpc.properties ```properties rpc.service_address=127.0.0.1:8000 rpc.registry_address=127.0.0.1:2181 ``` - rpc.service_address:发布 RPC 服务的地址 - rpc.registry_address:ZooKeeper 服务器的地址 ### 第四步:启动 RPC 服务 ```java package com.xxx.rpc.sample.server; import org.springframework.context.support.ClassPathXmlApplicationContext; public class RpcBootstrap { public static void main(String[] args) { new ClassPathXmlApplicationContext("spring.xml"); } } ``` 运行 RpcBootstrap 类,将对外发布 RPC 服务,同时进行服务注册 ## 调用 RPC 服务 > 参见 rpc-sample-client 模块 ### 第一步:添加 Maven 依赖 ```xml com.xxx.rpc rpc-sample-api ${version.rpc} com.xxx.rpc rpc-client ${version.rpc} ``` - RPC Sample API:RPC 接口所在模块的依赖 - RPC Client:RPC 客户端框架的依赖 ### 第二步:配置 RPC 客户端 #### spring.xml ```xml ``` - Service Discovery:用于服务发现,若使用 ZooKeeper 实现,则需提供 ZooKeeper 地址 - RPC Proxy:用于获取 RPC 代理接口 #### rpc.properties ```properties rpc.registry_address=127.0.0.1:2181 ``` - rpc.registry_address:ZooKeeper 服务器的地址(IP 地址与端口) ### 第三步:调用 RPC 服务 ```java @Autowired private RpcProxy rpcProxy; // 1 ... HelloService helloService = rpcProxy.create(HelloService.class); // 2 String result = helloService.hello("World"); // 3 ``` 1. 注入 RpcProxy 对象 2. 调用 RpcProxy 对象的 create 方法来创建 RPC 代理接口 3. 调用 RPC 代理接口的方法,就像调用远程接口方法一样