一個開源的強型別客戶端(.NET 中的 Open Fegin)— Rabbit Go

KAnts發表於2018-02-13

在做RabbitCloud(之前是一個RPC,現在是一個微服務框架)的時候往往避不開客戶端代理,之前把這些客戶端代理都算作服務框架不可缺少的一部分,隨著後期的深入發現這些客戶端代理其實可以互通,類似spring cloud 的 open fegin。

因為它們最終的行為就是構建一個message進行編碼,傳送,然後解碼服務端的返回資訊。在閱讀open fegin的原始碼之後寫了Rabbit Go。

一個簡單的客戶端

image

image

呼叫示例

image

最新的樣本:https://github.com/RabbitTeam/go/tree/master/samples

發生了什麼?

我們使用fiddler來監聽請求資訊。

GetAsync

image

DeleteAsync

image

PostAsync

imageimage

PutAsync

imageimage

特性

  1. 豐富的攔截器(IAsyncRequestInterceptor、IAsyncExceptionInterceptor)
  2. 可替換的編解碼器(預設為json,使用 Newtonsoft.Json)
  3. 全域性攔截器
  4. 全域性模型公約
  5. 良好的抽象與實現拆分(易擴充套件)
  6. url支援模板
  7. 可擴充套件的請求程式(目前只有HttpGoClient)
  8. 不只為HTTP(未來會新增對Grpc、dubbo等服務提供者的實現)

專案資訊

原始碼地址:https://github.com/RabbitTeam/go

NuGet:https://www.nuget.org/packages/Rabbit.Go.Core

基於 Rabbit Go 的客戶端

原始碼地址:DingTalk(釘釘開放平臺)

用在生產的GoClient定義

書籍評論服務

image

image

image

賬號服務

image

image

ps:生產專案整合了RabbitCloud,實現了服務發現、重試、負載均衡。每次呼叫過程中的 comment,user 會根據一定的策略自動解析成對應服務的真實ip地址和埠進行呼叫。

RabbitCloud還是一個實驗性專案,目前只放出了原始碼,並沒有任何整合文件。

開源地址:https://github.com/rabbitteam/rabbitcloud/tree/dev

接下來

  1. 在不使用DI的情況下使用
  2. 提供服務發現、重試、限流、斷路器的支援(整合 Rabbit Cloud)
  3. 提供對Grpc的呼叫支援
  4. 提供對dubbo的呼叫支援

寫在最後

.NET技術棧QQ群:384413261(點選加入 .NET Group

相關文章