SOFABolt是一款網絡通信框架,當你需要為應用程序配置遠程通信服務的時候就可以使用這款框架,通過這款軟件就可以配置多款應用程序遠程服務調用具體方案,讓應用程序之前的數據可以同步,從而在監控平臺獲取多個終端的數據,對于需要遠程監控數據、監控流量變化、監控平臺負載等場景很有幫助,軟件基于Netty開發,您可以在SOFABoot中使用XML、在SOFABoot中使用注釋、在SOFABoot中使用動態API,也可以結合SOFARPC使用,為開發者提供更便捷的應用通信服務配置方案!
SOFABolt軟件功能
SOFABolt的基功能包括:
1、基通信功能 ( remoting-core )
基于 Netty 高效的網絡 IO 與線程模型運用
連接管理 (無鎖建連,定時斷鏈,自動重連)
基通信模型 ( oneway,sync,future,callback )
超時控制
批量解包與批量提交處理器
心跳與 IDLE 事件處理
2、協議框架 ( p tocol-skeleton )
命令與命令處理器
編解碼處理器
心跳觸發器
3、私有協議定制實現 – RPC 通信協議 ( pt ocol-implementation )
RPC 通信協議的設計
靈活的反序列化時機控制
請求處理超時 FailFast 機制
用戶請求處理器 ( UserPcessor )
雙工通信
SOFABolt軟件特色
SOFABolt 是螞蟻金融服務集團開發的一套基于 Netty 實現的網絡通信框架。
* 為了讓 Java 程序員能將更多的精力放在基于網絡通信的業務邏輯實現上,而不是過多的糾結于網絡底層 NIO 的實現以及處理難以調試的網絡問題,Netty 應運而生。
* 為了讓中間件開發者能將更多的精力放在產品功能特實現上,而不是重復地一遍遍制造通信框架的子,SOFABolt 應運而生。
Bolt 名字取自迪士尼動畫-閃,是一個基于 Netty 最佳實踐的輕量、易用、高能、易擴展的通信框架。
這些年我們在微服務與消息中間件在網絡通信上解決過很多問題,積累了很多經驗,并持續的進行著優化和完善,我們希望能把總結出的解決方案沉淀到 SOFABolt 這個基組件里,讓更多的使用網絡通信的場景能夠統一受益。
目前該產品已經運用在了螞蟻中間件的微服務(SOFARPC)、消息中心、分布式事務、分布式開關、以及配置中心等眾多產品上。
SOFABolt教程
開始使用SOFABoot
建立專案
1、準備環境:SOFABoot需要JDK7或JDK8,并且需要使用Apache Maven 2.2.5或更高版本進行編譯。
2、生成SOFABoot項目:SOFABoot基于Spng Boot。因此,您可以使用Spng Boot的項目生成工具來生成標準的Spng Boot項目。
3、添加SOFABoot依賴關系:生成的標準Spng Boot項目直接使用Spng父依賴關系,應將其更改為SOFABoot提供的父依賴關系。父級依賴項提供并管理SOFABoot提供的各種啟動程序。
將以上內容替換為以下內容:
1、Configure application.pperties: application.pperties是SOFABoot項目中的配置文件。在這里,您需要配置應用程序名稱。
spng.application.name=AppName
2、介紹RPC啟動器:
聲明SOFABoot的xsd文件:
在要使用的XML配置文件中,將頭文件xsd文件的聲明配置為以下內容。這樣可以使用SOFABoot定義的XML元素進行開發。
定義服務接口和實施
在上發布服務
在xml文件中配置以下內容。刷新Spng上下文后,SOFABoot在上注冊服務實現,通過螺栓協議與客戶端通信,并將諸如地址之類的元數據發布到注冊表中心(默認情況下,本地文件用作注冊表中心)。
客戶咨詢服務
在xml文件中配置以下內容。刷新Spng上下文后,SOFABoot會生成RPC代理Bean personReferenceBolt。這使您可以直接在代碼中使用Bean進行遠程調用。
運行項目
SpngBoot的啟動類編碼如下。上面的xml文件是使用ImportResource在此處加載的。
輸出結果如下:
sync
通過此步驟,您已經完成了服務發布和參考。
在非Spng環境中使用API
SOFARPC
服務發布
服務發布的過程涉及三個類RegistryConfig,ServerConfig,PviderConfig。
1、注冊表配置
1、
RegistryConfig代表注冊中心。如上所述,服務注冊中心的地址和端口是127.0.0.1:2181,協議是Zookeeper。
i.配置 java ServerConfig Config = new ServerConfig() .setPort(8803) .setPtocol(“bolt”);ServerConfig表示運行服務的容器。上面聲明了使用8803端口和bolt協議的。
1、PviderConfig
PviderConfig代表服務發布。上面聲明了服務的接口,實現了運行該服務的,并最終通過該export方法發布了該服務。
服務參考
服務參考涉及兩個類,即RegistryConfig和ConsumerConfig。
ConsumerConfig代表服務參考。上面聲明了所引用服務接口的接口和服務注冊中心,最后通過該refer方法引用該服務,以獲取該服務的遠程調用的代理。
在SOFABoot中使用XML
XML模式
該辦法發布和XML模式的參考服務如下。sofa:代表發布服務,并sofa:reference代表引用服務。sofa:binding指示用于服務發布或參考的協議。
服務也可以通過多種協議發布,如下所示:
服務參考
服務還可以通過其他協議引用:
在SOFABoot中使用注釋
使用注釋進行服務發布/參考
除了常規的xml模式外,還支持在SOFABoot環境中發布和引用帶有注釋的服務。類似XML,我們提供 @SofaService和@SofaReference以及@SofaServiceBinding和@SofaReferenceBinding注釋為多協議。
服務發布
要發布RPC服務,只需要@SofaService在Bean上添加注釋即可指定接口和協議類型。
服務參考
對于需要引用遠程服務的bean,只需在屬或方法上添加Reference批注。這支持bolt,dubbo,rest協議。
在SOFABoot中使用動態API
使用API
SOFABoot提供了一組用于RPC服務發布和參考的編程API。直接在代碼中發布和引用RPC服務很方便。與Spng的ApplicationContextAware相似,要使用編程API,首先需要實現ClientFactoryAware接口以獲取編程組件API:
以DirectService為例,了解如何使用clientFactory通過編程API發布RPC服務:
在上面的代碼中:
1、首先,ServiceClient通過獲得對象clientFactory。
2、,構造ServiceParam包含發布服務所需的參數的對象,并使用該setInstance方法將要發布的對象設置為RPC服務,setInteceType以設置服務的接口。
3、最后,調用的服務方法ServiceClient來發布RPC服務。
通過編程API引用RPC服務的代碼類似:
同樣,引用一個RPC服務,代碼只需要得到ReferenceClient來自ClientFactory構造一個ReferenceParam類似發布服務,下一組了服務接口,最后調用ReferenceClient的參考方法。