最近在項(xiàng)目開發(fā)中有用到sofa-rpc框架,其是螞蟻金服開源的,簡(jiǎn)單的看了一下源碼其和阿里巴巴另外一個(gè)比較出名的RPC框架Dubbo類似,其實(shí)sofa-rpc提供的dubbo協(xié)議最終就是使用的Dubbo的功能(sofa-rpc直接將dubbo的jar引入),所以如果對(duì)Dubbo有所了解的人我感覺在sofa-rpc學(xué)習(xí)上也是很快的。
SOFARPC 簡(jiǎn)介

SOFARPC 是一個(gè)高可擴(kuò)展性、高性能、生產(chǎn)級(jí)的 Java RPC 框架。在螞蟻金服 SOFARPC 已經(jīng)經(jīng)歷了十多年及五代版本的發(fā)展。SOFARPC 致力于簡(jiǎn)化應(yīng)用之間的 RPC 調(diào)用,為應(yīng)用提供方便透明、穩(wěn)定高效的點(diǎn)對(duì)點(diǎn)遠(yuǎn)程服務(wù)調(diào)用方案。為了用戶和開發(fā)者方便的進(jìn)行功能擴(kuò)展,SOFARPC 提供了豐富的模型抽象和可擴(kuò)展接口,包括過濾器、路由、負(fù)載均衡等等。同時(shí)圍繞 SOFARPC 框架及其周邊組件提供豐富的微服務(wù)治理方案。
功能特性
- 透明化、高性能的遠(yuǎn)程服務(wù)調(diào)用
- 支持多種服務(wù)路由及負(fù)載均衡策略
- 支持多種注冊(cè)中心的集成
- 支持多種協(xié)議,包括 Bolt、Rest、Dubbo 等
- 支持同步、單向、回調(diào)、泛化等多種調(diào)用方式
- 支持集群容錯(cuò)、服務(wù)預(yù)熱、自動(dòng)故障隔離
- 強(qiáng)大的擴(kuò)展功能,可以按需擴(kuò)展各個(gè)功能組件
關(guān)聯(lián)項(xiàng)目
需要
編譯需要 JDK 7 及以上、Maven 3.2.5 及以上。
運(yùn)行需求 JDK 6 及以上。
文檔
示例:
1、引入sofa-rpc相關(guān)的jar
<groupId>com.alipay.sofa</groupId> <artifactId>sofa-rpc-all</artifactId>
2、服務(wù)端發(fā)布服務(wù),sofa-rpc支持zookeeper作為注冊(cè)中心
public class ServerMain { public static void main(String[] args) { RegistryConfig registryConfig = new RegistryConfig() .setProtocol('zookeeper') .setAddress('127.0.0.1:2181'); ServerConfig serverConfig = new ServerConfig() ProviderConfig<HelloService> providerConfig = new ProviderConfig<HelloService>() .setInterfaceId(HelloService.class.getName()) .setRef(new HelloServiceImpl()) .setRegistry(registryConfig) .setServer(serverConfig);
3、客戶端引用服務(wù)
public class ClientMain { public static void main(String[] args) { RegistryConfig registryConfig = new RegistryConfig() .setProtocol('zookeeper') .setAddress('127.0.0.1:2181'); ConsumerConfig<HelloService> consumerConfig = new ConsumerConfig<HelloService>() .setInterfaceId(HelloService.class.getName()) .setRegistry(registryConfig); HelloService service = consumerConfig.refer(); System.out.println(service.sayHello('world')); } catch (InterruptedException e) {
4、服務(wù)接口及實(shí)現(xiàn)類
(1)接口
public interface HelloService { public String sayHello(String name);
(2)實(shí)現(xiàn)類
public class HelloServiceImpl implements HelloService { public String sayHello(String name) {
5、運(yùn)行結(jié)果
(1)zookeeper中生產(chǎn)者和消費(fèi)者節(jié)點(diǎn)

(2)運(yùn)行結(jié)果數(shù)據(jù)

6、sofa-rpc調(diào)用流程
客戶端模塊是一個(gè)較復(fù)雜的模塊,這里包含了集群管理、路由、地址管理器、連接管理器、負(fù)載均衡器,還與代理、注冊(cè)中心等模塊交互。
參見:

|