在做RabbitCloud(之前是一個RPC,現在是一個微服務框架)的時候往往避不開客戶端代理,之前把這些客戶端代理都算作服務框架不可缺少的一部分,隨著後期的深入發現這些客戶端代理其實可以互通,類似spring cloud 的 open fegin。
因為它們最終的行為就是構建一個message進行編碼,傳送,然後解碼服務端的返回資訊。在閱讀open fegin的原始碼之後寫了Rabbit Go。
一個簡單的客戶端
呼叫示例
最新的樣本:https://github.com/RabbitTeam/go/tree/master/samples
發生了什麼?
我們使用fiddler來監聽請求資訊。
GetAsync
DeleteAsync
PostAsync
PutAsync
特性
- 豐富的攔截器(IAsyncRequestInterceptor、IAsyncExceptionInterceptor)
- 可替換的編解碼器(預設為json,使用 Newtonsoft.Json)
- 全域性攔截器
- 全域性模型公約
- 良好的抽象與實現拆分(易擴充套件)
- url支援模板
- 可擴充套件的請求程式(目前只有HttpGoClient)
- 不只為HTTP(未來會新增對Grpc、dubbo等服務提供者的實現)
專案資訊
原始碼地址:https://github.com/RabbitTeam/go
NuGet:https://www.nuget.org/packages/Rabbit.Go.Core
基於 Rabbit Go 的客戶端
原始碼地址:DingTalk(釘釘開放平臺)
用在生產的GoClient定義
書籍評論服務
賬號服務
ps:生產專案整合了RabbitCloud,實現了服務發現、重試、負載均衡。每次呼叫過程中的 comment,user 會根據一定的策略自動解析成對應服務的真實ip地址和埠進行呼叫。
RabbitCloud還是一個實驗性專案,目前只放出了原始碼,並沒有任何整合文件。
開源地址:https://github.com/rabbitteam/rabbitcloud/tree/dev
接下來
- 在不使用DI的情況下使用
- 提供服務發現、重試、限流、斷路器的支援(整合 Rabbit Cloud)
- 提供對Grpc的呼叫支援
- 提供對dubbo的呼叫支援
寫在最後
.NET技術棧QQ群:384413261(點選加入 .NET Group)