一个开源的强类型客户端(.NET 中的 Open Fegin)— Rabbit Go

在做RabbitCloud(之前是一个RPC,现在是一个微服务框架)的时候往往避不开客户端代理,之前把这些客户端代理都算作服务框架不可缺少的一部分,随着后期的深入发现这些客户端代理其实可以互通,类似spring cloud 的 open fegin。

因为它们最终的行为就是构建一个message进行编码,发送,然后解码服务端的返回信息。在阅读open fegin的源码之后写了Rabbit Go。


一个简单的客户端

一个开源的强类型客户端(.NET 中的 Open Fegin)— Rabbit Go

一个开源的强类型客户端(.NET 中的 Open Fegin)— Rabbit Go

调用示例

一个开源的强类型客户端(.NET 中的 Open Fegin)— Rabbit Go

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

发生了什么?

我们使用fiddler来监听请求信息。

GetAsync

一个开源的强类型客户端(.NET 中的 Open Fegin)— Rabbit Go

DeleteAsync

一个开源的强类型客户端(.NET 中的 Open Fegin)— Rabbit Go

PostAsync

一个开源的强类型客户端(.NET 中的 Open Fegin)— Rabbit Go一个开源的强类型客户端(.NET 中的 Open Fegin)— Rabbit Go

PutAsync

一个开源的强类型客户端(.NET 中的 Open Fegin)— Rabbit Go一个开源的强类型客户端(.NET 中的 Open Fegin)— Rabbit Go


特性

  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定义

书籍评论服务

一个开源的强类型客户端(.NET 中的 Open Fegin)— Rabbit Go

一个开源的强类型客户端(.NET 中的 Open Fegin)— Rabbit Go

一个开源的强类型客户端(.NET 中的 Open Fegin)— Rabbit Go

账号服务

一个开源的强类型客户端(.NET 中的 Open Fegin)— Rabbit Go

一个开源的强类型客户端(.NET 中的 Open Fegin)— Rabbit Go

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

原文地址: https://www.cnblogs.com/ants/p/8445965.html 



.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

一个开源的强类型客户端(.NET 中的 Open Fegin)— Rabbit Go