螞蟻金服RPC框架SOFA-RPC - 初體驗
前言
SOFARPC 最早源於阿里內部的 HSF,是近期螞蟻金服開源的一個高可擴充套件性、高效能、生產級的 Java RPC 框架。SOFA-RPC 在螞蟻金服已經歷了十多年的發展,致力於簡化應用之間的 RPC 呼叫。為應用提供方便透明、穩定高效的點對點遠端服務呼叫方案。
為了使用者和開發者方便的進行功能擴充套件,SOFA-RPC 提供了豐富的模型抽象和可擴充套件介面,包括過濾器、路由、負載均衡等。同時圍繞 SOFA-RPC 框架及其周邊元件提供豐富的微服務治理方案。
正文
1. 功能特性
- 透明化、高效能的遠端服務呼叫
- 支援多種服務路由及負載均衡策略
- 支援多種註冊中心的整合
- 支援 bolt、rest、dubbo 等多種通訊協議
- 支援同步、單向、回撥、泛化等多種呼叫方式
- 支援叢集容錯、服務預熱、自動故障隔離
- 強大的擴充套件功能,可以按需擴充套件各個功能元件
2. 實現原理
a. 服務釋出
當一個 SOFARPC 的應用啟動的時候,如果發現當前應用需要釋出 RPC 服務的話,那麼 SOFARPC 會將這些服務註冊到服務註冊中心上。如圖中 Service 指向 Registry。
b. 服務訂閱
當引用這個服務的 SOFARPC 應用啟動時,會從服務註冊中心訂閱到相應服務的後設資料資訊。服務註冊中心收到訂閱請求後,會將釋出方的後設資料列表實時推送給服務引用方。如圖中 Registry 指向 Reference。
c. 服務呼叫
當服務引用方拿到地址以後,就可以從中選取地址發起呼叫了。如圖中 Reference 指向 Service。
3. 快速開始
3.1. 引入sofa-rpc依賴
<dependencies>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-rpc-all</artifactId>
<version>5.3.1</version>
</dependency>
</dependencies>
3.2. 編寫服務介面和服務實現類
HelloService.java
public interface HelloService {
String sayHello(String string);
}
HelloServiceImpl.java
public class HelloServiceImpl implements HelloService {
@Override
public String sayHello(String string) {
System.out.println("Server receive: " + string);
return "hello " + string + " !";
}
}
3.3. 編寫服務提供者啟動類
QuickStartServer.java
public class QuickStartServer {
public static void main(String[] args) {
ServerConfig serverConfig = new ServerConfig()
.setProtocol("bolt") // 設定一個協議,預設bolt
.setPort(9696) // 設定一個埠,預設12200
.setDaemon(false); // 非守護執行緒
ProviderConfig<HelloService> providerConfig = new ProviderConfig<HelloService>()
.setInterfaceId(HelloService.class.getName()) // 指定介面
.setRef(new HelloServiceImpl()) // 指定實現
.setServer(serverConfig); // 指定服務端
providerConfig.export(); // 釋出服務
}
}
執行服務端提供方,日誌輸出如下:
Sofa-Middleware-Log SLF4J Warn : No log util is usable, Default app logger will be used.
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Sofa-Middleware-Log SLF4J Warn : No log util is usable, Default app logger will be used.
3.4. 編寫服務消費者啟動類
QuickStartClient.java
public class QuickStartClient {
public static void main(String[] args) {
ConsumerConfig<HelloService> consumerConfig = new ConsumerConfig<HelloService>()
.setInterfaceId(HelloService.class.getName()) // 指定介面
.setProtocol("bolt") // 指定協議
.setDirectUrl("bolt://127.0.0.1:9696"); // 指定直連地址
HelloService helloService = consumerConfig.refer();
while (true) {
System.out.println(helloService.sayHello("world"));
try {
Thread.sleep(200);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
執行服務端消費方,呼叫服務提供方:
- 服務提供方日誌輸出如下:
Server receive: world
Server receive: world
Server receive: world
Server receive: world
- 服務消費方日誌輸出如下:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Sofa-Middleware-Log SLF4J Warn : No log util is usable, Default app logger will be used.
Sofa-Middleware-Log SLF4J Warn : No log util is usable, Default app logger will be used.
hello world !
hello world !
hello world !
hello world !
小結
這是一個快速入門的例子!
可以發現,在使用上,SOFA-RPC 與淘寶的 Dubbo,微博的 Motan 並無太大的區別。Dubbo 作為整套服務治理而存在,而 SOFA-RPC 只是一款輕量級的 RPC 框架,基於 HSF 框架改造,提供更加完善、強大的、多樣化 RPC 程式設計 API。
歡迎關注技術公眾號: 零壹技術棧
本帳號將持續分享後端技術乾貨,包括虛擬機器基礎,多執行緒程式設計,高效能框架,非同步、快取和訊息中介軟體,分散式和微服務,架構學習和進階等學習資料和文章。
相關文章
- 螞蟻金服RPC框架SOFA-RPC初體驗RPC框架
- 螞蟻 RPC 框架 SOFA-RPC 初體驗RPC框架
- 螞蟻金服SOFA-Boot整合SOFA-RPC(下篇)bootRPC
- 螞蟻金服SOFA-Boot整合SOFA-RPC(中篇)bootRPC
- 螞蟻金服SOFA-Boot整合SOFA-RPC(上篇)bootRPC
- 螞蟻金服RPC框架結構分析RPC框架
- 原始碼剖析 | 螞蟻金服 mPaaS 框架下的 RPC 呼叫歷程原始碼框架RPC
- 螞蟻金服 Service Mesh 大規模落地系列 - RPC 篇RPC
- 【工作】螞蟻金服招DBA
- 螞蟻金服開源自動化測試框架 SOFAACTS框架
- 【實習】螞蟻金服中介軟體實習生招聘
- 9.9螞蟻金服二三輪面試面試
- 螞蟻金服通訊框架SOFABolt解析|編解碼機制框架
- 螞蟻金服 Service Mesh 深度實踐
- (螞蟻金服mPaaS)統一儲存
- 螞蟻金服 Service Mesh 實踐探索
- 螞蟻金服技術長--程立
- 阿里同意入股螞蟻金服33%股權 為螞蟻上市鋪路阿里
- 螞蟻金服招聘中介軟體 Go 語言專家Go
- 開篇 | 螞蟻金服 mPaaS 服務端核心元件體系概述服務端元件
- 乾貨分享:螞蟻金服前端框架和工程化實踐前端框架
- 螞蟻金服通訊框架SOFABolt解析 |序列化機制(Serializer)框架
- 螞蟻金服通訊框架SOFABolt解析|序列化機制(Serializer)框架
- 螞蟻金服!前端實習生!內推!提前批!前端
- 螞蟻金服面試經歷-前期準備面試
- 招聘貼:螞蟻金服招Java研發Java
- 招聘貼:螞蟻金服招前端開發前端
- 【北京】Golang技術專家--螞蟻金服Golang
- 螞蟻金服宮孫:guava探究系列之優雅校驗資料Guava
- 螞蟻金服 DB Mesh 的探索與實踐
- 螞蟻金服面試經歷-臨場發揮面試
- 螞蟻金服急召java開發、測試Java
- 從平臺到中臺 | Elasticsearch 在螞蟻金服的實踐經驗Elasticsearch
- 螞蟻金服的 3D 互動探索之路3D
- 螞蟻金服有哪些金融特色的機器學習技術?機器學習
- 我在螞蟻金服技術風險部做“醫生”
- 螞蟻金服Service Mesh漸進式遷移方案
- 【螞蟻金服】國際事業部招前端啦!前端