# 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 extends RoutingStrategy> 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. 网络连接中断,如下图流程处理:

#### 注册中心配置数据变更
1. 服务消费方,启动后会下载已注册服务的元数据,并开启etcd监听。
2. (etcd注册中心的)服务注册、服务删除事件,会触发客户端重新下载元数据; 服务消费方将已下载的元数据缓存至本地。
3. 服务提供方,启动完成后,会(使用租约的方式)将自身注册至注册中心; (6秒)租约到期, 注册中心的服务元数据条目会自动删除, 服务方使用独立线程持续续约(5秒每次)