一个开源的强类型客户端(.NET 中的 Open Fegin)— Rabbit Go
在做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)
一个开源的强类型客户端(.NET 中的 Open Fegin)— Rabbit Go的更多相关文章
- 应用于Java中的一个开源的表达式语言(Expression Language)
OGNL(英文全称:Object Graph Navigation Language,中文名:对象导航图语言)是应用于Java中的一个开源的表达式语言(Expression Language),它被集 ...
- 使用calabash测试开源中国Android客户端
Calabash-android是支持android的UI自动化测试框架,前面已经介绍过<中文Win7下成功安装calabash-android步骤>,这篇博文尝试测试一个真实应用:开源中 ...
- 开源中国iOS客户端学习
开源中国iOS客户端学习 续写前言 <开源中国iOS客户端学习>续写前系列博客 http://blog.csdn.net/column/details/xfzl-kykhd.html ...
- Amoeba是一个类似MySQL Proxy的分布式数据库中间代理层软件,是由陈思儒开发的一个开源的java项目
http://www.cnblogs.com/xiaocen/p/3736095.html amoeba实现mysql读写分离 application shang 2年前 (2013-03-28) ...
- Ceph:一个开源的 Linux PB 级分布式文件系统
探索 Ceph 文件系统和生态系统 M. Tim Jones , 自由作家 简介: Linux®持续不断进军可扩展计算空间,特别是可扩展存储空间.Ceph 最近才加入到 Linux 中令人印象深刻的 ...
- SSDB是一个开源的高性能数据库服务器
SSDB是一个开源的高性能数据库服务器, 使用Google LevelDB作为存储引擎, 支持T级别的数据, 同时支持类似Redis中的zset和hash等数据结构, 在同时需求高性能和大数据的条件下 ...
- 分享一个开源的网盘下载工具BaiduPCS-Go
大家在使用网盘的时候,一定忍受不了限速下载的速度.今天给大家分享一个开源的网盘下载项目BaiduPCS-Go.Go语言编写,仿 Linux shell 文件处理命令的百度网盘命令行客户端.多平台支持, ...
- 一脸懵逼学习Storm---(一个开源的分布式实时计算系统)
Storm的官方网址:http://storm.apache.org/index.html 1:什么是Storm? Storm是一个开源的分布式实时计算系统,可以简单.可靠的处理大量的数据流.被称作“ ...
- 【转】【完全开源】微信客户端.NET版
[转][完全开源]微信客户端.NET版 目录 说明 功能 原理步骤 一些参考 说明 前两天比较闲,研究了一下web版微信.因为之前看过一篇博客讲微信web协议的,后来尝试分析了一下,半途中发现其实没什 ...
随机推荐
- 去除FineReport报表点击单元格时出现的黑框
选择模版->模版web属性 添加加载结束事件,具体代码如下 $("td").bind("click",function(){return false;}) ...
- C# 构造器总结
在C#中,构造器分为实例构造器和类型构造器, 一.实例构造器 构造引用类型的对象时,在调用实例 构造器之前,为对象分配的内存总是归0,没有被构造器显示重写的字段都保证获得0或null的值 在一个类中, ...
- [国嵌攻略][142][LCD驱动程序架构]
LCD裸机驱动回顾 1.LCD初始化 1.1.控制器初始化 1.2.端口初始化 1.3.指明了帧缓冲 2.LCD图形显示 2.1.将图形数据写入帧缓冲 Linux帧缓冲体验 把图片转换成开发板屏对应的 ...
- js时间戳与时间日期间相互转换
今天在工作中要将获取到的时间转换为时间戳,一时间竟不知道怎么用,于是不得不去查询资料,这里特地做个笔记. 1.将日期转换为时间戳. 要将日期转换为时间戳,首先得先获取到日期,这里可以直接指定日期,或者 ...
- 从零开始学习前端JAVASCRIPT — 2、JavaScript基础ES5
1:ES5简介 ECMAScript 5.1 (或仅 ES5) 是ECMAScript(基于JavaScript的规范)标准的修正. 与HTML5规范进程本质类似,ES5通过对现有JavaScript ...
- TP5.0 excel 导入导出
引第三方的phpexcel类库放到 ThinkPHP\Library\Vendor\demo下,自己建的文件夹demo 再将Excel.class放到ThinkPHP\Library\Org\clas ...
- 如何使用cmd打开磁盘目录和文件
在windows操作系统中拥有命令行工具(cmd).cmd具有强大的功能,这里我就和大家介绍一下怎么使用cmd命令打开文件. 工具/原料 cmd命令行 打开cmd 1 在windows操作系统中按住w ...
- CSS容器属性
最近一直想美化博客的文字效果和增加文章末尾的转发提示,所以这两天抽空研究了一下CSS,前两篇可以翻我的博客,今天写的这篇是介绍增加文章末尾的转发提示,效果如文章末尾所示,好了,CSS很简单,我就不介绍 ...
- ZooKeeper集群的安装、配置、高可用测试
Dubbo注册中心集群Zookeeper-3.4.6 Dubbo建议使用Zookeeper作为服务的注册中心. Zookeeper集群中只要有过半的节点是正常的情况下,那么整个集群对外就是可用的.正是 ...
- strman--java8字符串工具类
strman-java 是Java8的字符串处理库,它的灵感来自 dleitee/strman . Strmen-java 是一个字符串处理工具,你可以通过 maven 将它引入到项目中.除了 Jav ...