# seed-rpc **Repository Path**: glin/seed-rpc ## Basic Information - **Project Name**: seed-rpc - **Description**: RPC工具组件; powered by guanglin.gao - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2023-01-12 - **Last Updated**: 2023-04-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # seed-rpc #### 介绍 RPC工具组件;依赖于java、spring-boot、etcd建立的微服务调用;提供服务注册与发现的基础功能 #### 依赖与默认配置 1. 此组件依赖于spring-boot,用于建立基于spring-boot的微服务,包括如下依赖项 ``` org.springframework spring-context provided org.springframework.boot spring-boot provided org.springframework.boot spring-boot-autoconfigure provided ``` 2. 此组件依赖于etcd-server或扩展etcd开发的服务,用于rpc服务的服务注册和服务发现。依赖的连接客户端为: ``` com.ibm.etcd etcd-java ``` 3. 示例配置,默认IP: 网卡eth0的ip,默认端口: 31792 ``` rpc: local: ip: 10.100.11.101 # 本地暴露IP, consumer可不配置此项 port: 31792 # socket端口, consumer可不配置此项 registry: 192.168.180.182:2379,192.168.180.183:2379,10.100.11.75:2379 # 注册中心地址, provider、consumer必须配置此项 service-name: ${spring.application.name} # 服务名称, consumer可不配置此项 base-package-scan: * # 扫描基础包, consumer和provider可不配置此项 ``` #### 使用方法 1. 依赖项 服务提供方 ``` org.seed.rpc server-stub 2.1.0 ``` 服务消费方 ``` org.seed.rpc client-stub 2.1.0 ``` 或同时包含服务提供方与消费方 ``` org.seed.rpc spring-boot-starter 2.1.0 ``` 2. 在服务提供方(Service Provider)的***接口上***使用注解 @RpcService标注; 在实现类上使用Spring注解@Component 标注(也可copy被实现接口的注解) 注解定义说明: ``` /** * 服务名称,指定目标服务的名称(consumer使用) */ String serviceName(); /** * 路由规则 */ Class routingStrategy() default RandomStrategy.class; /** * 请求超时时间 */ long requestTimeout() default 8000L; ``` 示例代码(推荐用法): ``` import org.seed.rpc.core.RpcService; @RpcService(serviceName = "rpc-service-provider") public interface StudentService { Integer getMyScore(); String getMyName(); } ``` ``` import org.springframework.stereotype.Component; @Component public class StudentServiceImpl implements StudentService { @Override public Integer getMyScore() { return 100; } @Override public String getMyName() { return "Guanglin.Gao"; } } ``` 3. 在服务使用方(Service Consumer),使用注解@RpcReference注入变量;用法类似Spring的@Autowired 例如: ``` @RpcReference private AStudentService studentService; ``` #### 异常处理机制 1. 超时,使用future的超时机制(异步执行后,获取future中的值,设置timeout) 2. 接口执行异常,直接抛出 3. 网络连接中断,如下图流程处理: ![](异常处理流程.png) #### 注册中心配置数据变更 1. 服务消费方,启动后会下载已注册服务的元数据,并开启etcd监听。 2. (etcd注册中心的)服务注册、服务删除事件,会触发客户端重新下载元数据; 服务消费方将已下载的元数据缓存至本地。 3. 服务提供方,启动完成后,会(使用租约的方式)将自身注册至注册中心; (6秒)租约到期, 注册中心的服务元数据条目会自动删除, 服务方使用独立线程持续续约(5秒每次)