一个开源的强类型客户端(.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

posted @ 2018-02-13 08:17 KAnts 阅读(...) 评论(...) 编辑 收藏