来源:KAnts
cnblogs.com/ants/p/8445965.html
在做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(钉钉开放平台)(https://github.com/RabbitTeam/go/tree/master/recipes/DingTalk)
用在生产的GoClient定义
书籍评论服务
账号服务
PS:生产项目集成了RabbitCloud,实现了服务发现、重试、负载均衡。每次调用过程中的 comment,user 会根据一定的策略自动解析成对应服务的真实ip地址和端口进行调用。
RabbitCloud还是一个实验性项目,目前只放出了源码,并没有任何集成文档。
开源地址:https://github.com/rabbitteam/rabbitcloud/tree/dev
接下来
在不使用DI的情况下使用
提供服务发现、重试、限流、断路器的支持(集成 Rabbit Cloud)
提供对Grpc的调用支持
提供对dubbo的调用支持
看完本文有收获?请转发分享给更多人
关注「DotNet」,提升.Net技能
淘口令:复制以下红色内容,再打开手淘即可购买
范品社,使用¥极客T恤¥抢先预览(长按复制整段文案,打开手机淘宝即可进入活动内容)
领取专属 10元无门槛券
私享最新 技术干货