SOFARPC 是一个高性能、高可扩展、生产级别的 RPC 框架,由蚂蚁金服开源。
本文会提供一个 SOFARPC 最简使用示例(使用 SOFARegistry 做注册中心),之后的源码分析都会基于该示例及其扩展进行。
SOFARPC 坐标:
com.alipay.sofa
sofa-rpc-all
5.5.3
SOFARegistryClient 坐标:(SOFARegistry 客户端)
com.alipay.sofa
registry-client-all
5.2.0
一、服务接口定义
public interface HelloService {
String sayHello(String string);
}
接口定义由 provider 进行定义和实现,并对接口定义进行打包,consumer 需要将接口定义的 jar 包引入。
二、服务接口实现
public class HelloServiceImpl implements HelloService {
@Override
public String sayHello(String string) {
System.out.println("Server receive: " + string);
return "hello " + string + " !";
}
}
三、服务端
public class QuickStartServer {
public static void main(String[] args) {
// 1. 注册中心配置
RegistryConfig registryConfig = new RegistryConfig()
.setProtocol("sofa") // 设置协议
.setAddress("127.0.0.1:9603"); // 设置注册中心 session 地址
// 2. 通信服务配置
ServerConfig serverConfig = new ServerConfig()
.setProtocol("bolt") // 设置一个协议,默认bolt
.setPort(12200) // 设置一个端口,默认12200
.setDaemon(false); // 非守护线程
// 3. provider 综合配置
ProviderConfig providerConfig = new ProviderConfig()
.setInterfaceId(HelloService.class.getName()) // 指定接口
.setRef(new HelloServiceImpl()) // 指定实现
.setRegistry(registryConfig) // 指定注册中心
.setServer(serverConfig); // 指定服务端
// 4. 进行服务暴露
providerConfig.export(); // 发布服务
}
}
四、客户端
public class QuickStartClient {
public static void main(String[] args) {
// 1. 注册中心配置
RegistryConfig registryConfig = new RegistryConfig()
.setProtocol("sofa") // 设置协议
.setAddress("127.0.0.1:9603"); // 设置注册中心 session 地址
// 2. consumer 综合配置
ConsumerConfig consumerConfig = new ConsumerConfig()
.setInterfaceId(HelloService.class.getName()) // 指定接口
.setRegistry(registryConfig)
.setProtocol("bolt") // 指定协议
.setConnectTimeout(10 * 1000);
// 3. 构造服务引用
HelloService helloService = consumerConfig.refer();
// 4. 进行服务调用
System.out.println(helloService.sayHello("world"));
}
}
ok,完成!!!代码很简单,本示例以 SOFARegistry 作为注册中心,通信方式使用的是 sync,由于 SOFARPC 底层通信使用的是 SOFABolt,所以支持 SOFABolt 所支持的四种通信模式。
值得注意的是,SOFARPC 本身并没有与 Spring 做集成操作,如果单单使用 SOFARPC,使用 JavaConfig 的方式进行配置;如果需要与 Spring 集成,请使用 SOFABoot。