最近整理下以前用过thrift来构建rpc服务写的东西,也发布到github上去了,地址:https://github.com/Xiazki/airlift
目前还在完善,简单介绍下:
airlift是一个基于thrift的rpc服务框架,利用Swift(停止维护了:pensive:)提供的注解来创建简单可序列化的thrift类型和服务。利用zookeeper提供了动态的注册和服务发现
并增加了客户端的负载均衡、重试机制。
Getting started
一个简单的例子
定义一个 ThriftStruct
参考 Swift Codec.
@ThriftStruct
public class ResultBean {
private String message;
private String code;
@ThriftField(1)
public String getMessage() {
return message;
}
@ThriftField
public void setMessage(String message) {
this.message = message;
}
@ThriftField(2)
public String getCode() {
return code;
}
@ThriftField
public void setCode(String code) {
this.code = code;
}
}
使用 ThriftService
定义一个提供服务的接口,并实现这个接口,如下:
@ThriftService
public interface HelloWorldApi {
@ThriftMethod
ResultBean getHi(String name);
}
接口实现类:
public class HelloWorldApiService implements HelloWorldApi {
public ResultBean getHi(String name) {
System.out.println("call getHi");
ResultBean resultBean = new ResultBean();
resultBean.setMessage(name + " hello world!");
resultBean.setCode("0");
return resultBean;
}
}
使用AirliftServer
启动服务,服务监听9013,withRegistryUrls("127.0.0.1:2181")
注册zookeeper地址,多个地址用;
拼接。
使用AirliftClientFactory
来创建客户端代理。
public class ServerStartTest {
public static void main(String[] args) {
List<Object> services = new ArrayList<>();
services.add(new HelloWorldApiService());
ServerConfig serverConfig = ServerConfig.builder().withPort(9013).withRegistryUrls("127.0.0.1:2181").build();
ClientConfig clientConfig = ClientConfig.builer().withRegistryUrls("127.0.0.1:2181").build();
try (
AirliftServer airliftServer = new AirliftServer(serverConfig, services).start();
AirliftClientFactory<HelloWorldApi> clientFactory = new AirliftClientFactory<>(clientConfig)
) {
HelloWorldApi helloWorldApi = clientFactory.get();
ResultBean resultBean = helloWorldApi.getHi("test");
System.out.println(resultBean.getMessage());
} catch (IOException e) {
e.printStackTrace();
}
}
}