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