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


在做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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM