一个开源的强类型客户端(.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协议的,后来尝试分析了一下,半途中发现其实没什 ...
随机推荐
- 微信小程序 登录流程规范解读
一. 官方登录时序图 二. 简单理解 这里仅按照官方推荐的规范来 0. 前置条件 一共有三端: - 微信小程序客户端 - 第三方服务器端(自己搭建) - 微信服务器端 1. 客户端获得code,并将c ...
- [国嵌攻略][109][Linux系统调用]
系统调用 函数实现体在内核空间,提供给应用程序来使用,就是一个系统调用. 工作流程 1.通过软中断(swi)从用户空间切换到内核空间.entry-common.S中的ENTRY(vector_swi) ...
- ABB安全区域(全局区域)的指令解析
VAR wztemporary wzone;//VAR:变量 //wztemporary:全局区域数据类型(wztemporary临时全局区域数据.wzstationary固定式全局区域)wzone: ...
- 任务驱动 搭建SSM开发环境
本篇主要阐述(IntelliJ IDEA + Maven + Spring + Spring MVC + Mybatis)搭建 为什么想要搭建ssm? 近期正好自己有一个小的点子要实现,恰好这学期开了 ...
- Vue下路由History mode导致页面无法渲染的原因
用 Vue.js + vue-router 创建单页应用,是非常简单的.使用 Vue.js ,我们已经可以通过组合组件来组成应用程序,当你要把 vue-router 添加进来,我们需要做的是,将组件( ...
- vue-cli的webpack模版项目配置解析-build/dev-server.js
我们在使用vue-cli搭建vuejs项目(Vuejs实例-01使用vue-cli脚手架搭建Vue.js项目)的时候,会自动生成一系列文件,其中就包含webpack配置文件.我们现在来看下,这些配置到 ...
- CSS background-clip 属性
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 对[UIApplication sharedApplication]理解
[ sharedApplication]返回UIApplication * application = nil; +(UIApplication*) shareApplication{ if(appl ...
- angular 选中切换面板
此方法采用的是没有路由的方式: html5 代码: <div [hidden]="flag"> <li class="music-list-datail ...
- CCF系列之日期计算(201509-2)
试题编号: 201509-2 时间限制: 1.0s 内存限制: 256.0MB 问题描述 给定一个年份y和一个整数d,问这一年的第d天是几月几日? 注意闰年的2月有29天.满足下面条件之一的是闰年: ...