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

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

一个简单的客户端

调用示例

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

发生了什么?

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

GetAsync

DeleteAsync

PostAsync

PutAsync

特性

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

书籍评论服务

账号服务

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

一个开源的强类型客户端(.NET 中的 Open Fegin)— Rabbit Go的更多相关文章

  1. 应用于Java中的一个开源的表达式语言(Expression Language)

    OGNL(英文全称:Object Graph Navigation Language,中文名:对象导航图语言)是应用于Java中的一个开源的表达式语言(Expression Language),它被集 ...

  2. 使用calabash测试开源中国Android客户端

    Calabash-android是支持android的UI自动化测试框架,前面已经介绍过<中文Win7下成功安装calabash-android步骤>,这篇博文尝试测试一个真实应用:开源中 ...

  3. 开源中国iOS客户端学习

    开源中国iOS客户端学习 续写前言 <开源中国iOS客户端学习>续写前系列博客    http://blog.csdn.net/column/details/xfzl-kykhd.html ...

  4. Amoeba是一个类似MySQL Proxy的分布式数据库中间代理层软件,是由陈思儒开发的一个开源的java项目

    http://www.cnblogs.com/xiaocen/p/3736095.html amoeba实现mysql读写分离 application  shang  2年前 (2013-03-28) ...

  5. Ceph:一个开源的 Linux PB 级分布式文件系统

    探索 Ceph 文件系统和生态系统 M. Tim Jones , 自由作家 简介:  Linux®持续不断进军可扩展计算空间,特别是可扩展存储空间.Ceph 最近才加入到 Linux 中令人印象深刻的 ...

  6. SSDB是一个开源的高性能数据库服务器

    SSDB是一个开源的高性能数据库服务器, 使用Google LevelDB作为存储引擎, 支持T级别的数据, 同时支持类似Redis中的zset和hash等数据结构, 在同时需求高性能和大数据的条件下 ...

  7. 分享一个开源的网盘下载工具BaiduPCS-Go

    大家在使用网盘的时候,一定忍受不了限速下载的速度.今天给大家分享一个开源的网盘下载项目BaiduPCS-Go.Go语言编写,仿 Linux shell 文件处理命令的百度网盘命令行客户端.多平台支持, ...

  8. 一脸懵逼学习Storm---(一个开源的分布式实时计算系统)

    Storm的官方网址:http://storm.apache.org/index.html 1:什么是Storm? Storm是一个开源的分布式实时计算系统,可以简单.可靠的处理大量的数据流.被称作“ ...

  9. 【转】【完全开源】微信客户端.NET版

    [转][完全开源]微信客户端.NET版 目录 说明 功能 原理步骤 一些参考 说明 前两天比较闲,研究了一下web版微信.因为之前看过一篇博客讲微信web协议的,后来尝试分析了一下,半途中发现其实没什 ...

随机推荐

  1. 微信小程序 登录流程规范解读

    一. 官方登录时序图 二. 简单理解 这里仅按照官方推荐的规范来 0. 前置条件 一共有三端: - 微信小程序客户端 - 第三方服务器端(自己搭建) - 微信服务器端 1. 客户端获得code,并将c ...

  2. [国嵌攻略][109][Linux系统调用]

    系统调用 函数实现体在内核空间,提供给应用程序来使用,就是一个系统调用. 工作流程 1.通过软中断(swi)从用户空间切换到内核空间.entry-common.S中的ENTRY(vector_swi) ...

  3. ABB安全区域(全局区域)的指令解析

    VAR wztemporary wzone;//VAR:变量 //wztemporary:全局区域数据类型(wztemporary临时全局区域数据.wzstationary固定式全局区域)wzone: ...

  4. 任务驱动 搭建SSM开发环境

    本篇主要阐述(IntelliJ IDEA + Maven + Spring + Spring MVC + Mybatis)搭建 为什么想要搭建ssm? 近期正好自己有一个小的点子要实现,恰好这学期开了 ...

  5. Vue下路由History mode导致页面无法渲染的原因

    用 Vue.js + vue-router 创建单页应用,是非常简单的.使用 Vue.js ,我们已经可以通过组合组件来组成应用程序,当你要把 vue-router 添加进来,我们需要做的是,将组件( ...

  6. vue-cli的webpack模版项目配置解析-build/dev-server.js

    我们在使用vue-cli搭建vuejs项目(Vuejs实例-01使用vue-cli脚手架搭建Vue.js项目)的时候,会自动生成一系列文件,其中就包含webpack配置文件.我们现在来看下,这些配置到 ...

  7. CSS background-clip 属性

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  8. 对[UIApplication sharedApplication]理解

    [ sharedApplication]返回UIApplication * application = nil; +(UIApplication*) shareApplication{ if(appl ...

  9. angular 选中切换面板

    此方法采用的是没有路由的方式: html5 代码: <div [hidden]="flag"> <li class="music-list-datail ...

  10. CCF系列之日期计算(201509-2)

    试题编号: 201509-2 时间限制: 1.0s 内存限制: 256.0MB 问题描述 给定一个年份y和一个整数d,问这一年的第d天是几月几日? 注意闰年的2月有29天.满足下面条件之一的是闰年: ...