最近整理下以前用過thrift來構(gòu)建rpc服務寫的東西夏志,也發(fā)布到github上去了,地址:https://github.com/Xiazki/airlift
目前還在完善苛让,簡單介紹下:
airlift是一個基于thrift的rpc服務框架沟蔑,利用Swift(停止維護了:pensive:)提供的注解來創(chuàng)建簡單可序列化的thrift類型和服務。利用zookeeper提供了動態(tài)的注冊和服務發(fā)現(xiàn)
并增加了客戶端的負載均衡狱杰、重試機制瘦材。
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
定義一個提供服務的接口,并實現(xiàn)這個接口仿畸,如下:
@ThriftService
public interface HelloWorldApi {
@ThriftMethod
ResultBean getHi(String name);
}
接口實現(xiàn)類:
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
啟動服務食棕,服務監(jiān)聽9013,withRegistryUrls("127.0.0.1:2181")
注冊zookeeper地址,多個地址用;
拼接错沽。
使用AirliftClientFactory
來創(chuàng)建客戶端代理簿晓。
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();
}
}
}