# turbo-rpc
**Repository Path**: hank-whu/turbo-rpc
## Basic Information
- **Project Name**: turbo-rpc
- **Description**: turbo-rpc 是一款速度超凡的异步响应式RPC框架.
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 128
- **Forks**: 45
- **Created**: 2018-02-06
- **Last Updated**: 2024-10-04
## Categories & Tags
**Categories**: rpc
**Tags**: None
## README
# turbo-rpc
**turbo-rpc 是一款速度超凡的异步响应式RPC框架**
## 功能特点
- 仅支持异步调用, Service 接口所有 public 方法返回值都必须为 CompletableFuture
- 配置定义在 Service 接口上, 而非实现类上, 方法实现者和调用者都不需要引入奇奇怪怪的注解
- 支持 REST 调用
- 支持失败回退, 支持熔断, 支持心跳, 支持自动重连
- 支持自定义 服务注册 负载均衡 序列化
- 支持 Filter, 可通过该机制实现 Tracing 限流限速 黑白名单 等功能
- 支持 spring boot
## Quick Start
Maven依赖:
```xml
com.turbo-rpc
turbo-rpc
0.0.9
com.turbo-rpc
turbo-kryo
0.0.9
com.turbo-rpc
turbo-protostuff
0.0.9
com.turbo-rpc
turbo-register-zk
0.0.9
com.turbo-rpc
turbo-spring-boot-starter
0.0.9
```
1.定义接口
```java
@TurboService(version = "1.0.0")
public interface HelloService {
@TurboService(version = "1.0.0", rest = "hello")
default CompletableFuture hello(String msg) {
// default实现会自动注册为失败回退方法,当远程调用失败时执行
return CompletableFuture.completedFuture("error");
}
}
```
2.服务端实现接口
```java
@Component
public class HelloServiceImpl implements HelloService {
@Override
public CompletableFuture hello(String msg) {
return CompletableFuture.completedFuture(msg);
}
}
```
3.配置turbo-server.conf, 声明 服务器地址 序列化协议 注册地址 等信息
4.服务端启动
```java
@SpringBootApplication(scanBasePackages = { "com.hello" })
@EnableTurboServer
public class TruboServerBootTest {
public static void main(String[] args) {
SpringApplication.run(TruboServerBootTest.class, args);
}
}
```
----------
5.客户端调用
```java
@Component
public class HelloReferTest {
@Autowired
HelloService helloService;
public void doSomeThing(String msg) {
helloService.hello(msg)
.thenAccept(message -> System.out.println(message));
}
}
```
6.配置turbo-client.conf, 声明 服务器地址 序列化协议 注册地址 等信息
7.客户端启动
```java
@SpringBootApplication(scanBasePackages = { "com.hello" })
@EnableTurboClient
public class HelloBootTest {
public static void main(String[] args) {
SpringApplication.run(HelloBootTest.class, args);
}
}
```
## turbo 技术原理
- [如何编写高性能的 RPC 框架](https://www.jianshu.com/p/7182b8751e75)
- [RPC 异步响应式调用](https://www.jianshu.com/p/1e406ffa5f90)