拥抱.NET Core,跨平台的轻量级RPC:Rabbit.Rpc
不久前发布了一篇博文“.NET轻量级RPC框架:Rabbit.Rpc”,当初只实现了非常简单的功能,也罗列了之后的计划,经过几天的不断努力又为Rabbit.Rpc增加了一大波新特性,今天主要介绍下项目近况。
特性一览
- Apache License 2.0协议开源
- 支持客户端负载均衡(提供了轮询、随机算法的实现)
- 支持ZooKeeper和文件共享形式的服务协调
- 运行时客户端代理生成(基于Roslyn)
- 预生成客户端代理
- 客户端代理预生成(基于Roslyn)
- 抽象的编解码器(提供了JSON、ProtoBuffer协议的实现)
- 抽象的传输通道(提供了DotNetty与Cowboy.Sockets的移植实现)
- 异常信息传递(服务端运行时的本地异常可以传递至客户端)
- NET Core项目架构
- 跨平台
项目概况

开源地址:https://github.com/RabbitTeam/Rpc
Rabbit.Rpc(支持跨平台)
Rpc核心类库,有如下功能:
- 服务Id生成
- 传输消息模型
- 类型转换
- 服务路由抽象
- 序列化器抽象(默认提供JSON序列化器)
- 传输抽象
- 编解码器抽象(默认提供JSON的编解码器实现)
- 客户端运行时(地址解析器、地址选择器,远程调用服务)
- 服务端运行时(服务条目管理、服务执行器、服务发现抽象、RpcServiceAttribute标记服务发现实现)
Rabbit.Rpc.ProxyGenerator(支持跨平台)
服务代理生成器,提供的功能:
- 服务代理实现生成
- 服务代理实例创建
extensions(相关扩展)
Rabbit.Rpc.Codec.ProtoBuffer(支持跨平台)
ProtoBuffer协议的编解码器实现。
Rabbit.Rpc.Coordinate.Zookeeper(支持跨平台)
基于ZooKeeper的服务路由管理。
Rabbit.Transport.DotNetty(暂不支持跨平台)
基于DotNetty的传输实现。
ps:官方以有将DotNetty支持NET Core的计划,大伙可以再等等,待官方支持后,会尽快进行适配。
Rabbit.Transport.Simple(支持跨平台)
由于DotNetty不支持跨平台运行,为了让rpc能在其它平台上跑通,故移植了“Cowboy.Sockets”实现了一个简单的传输实现。
tools
Rabbit.Rpc.Tests
单元测试项目。
Rabbit.Rpc.ClientGenerator(支持跨平台)
预生产服务代理的工具,提供了如下功能:
- 生成服务代理实现代码文件
- 生成服务代理实现程序集文件
性能测试
测试环境
|
OS |
CPU |
内存 |
硬盘 |
网络环境 |
虚拟机 |
|
Windows 10 x64 |
I7 3610QM |
16GB |
SSD |
127.0.0.1 |
否 |
|
Ubuntu 16.04 x64 |
I7 3610QM |
4GB |
SSD |
127.0.0.1 |
是 |
Windows10+NETCoreApp1.0+JSON协议+Simple传输

概述
平均用时:2601.6毫秒
平均每次用时:0.26毫秒
通过率:100%
Windows10+NETCoreApp1.0+ProtoBuffer协议+Simple传输

概述
平均用时:2625.4毫秒
平均每次用时:0.25毫秒
通过率:100%
Ubuntu16.04-x64+NETCoreApp1.0+JSON协议+Simple传输

概述
平均用时:3108.4毫秒
平均每次用时:0.31毫秒
通过率:100%
Ubuntu16.04-x64+NETCoreApp1.0+ProtoBuffer协议+Simple传输

概述
平均用时:3580.4毫秒
平均每次用时:0.35毫秒
通过率:100%
ps:linux性能与windows上的性能有一些差距,不知道是不是虚拟机的原因,但有个有趣的现象,protobuffer在linux上的性能居然比json低,应该是protobuffer库的实现不够优秀。
测试代码
https://github.com/RabbitTeam/Rpc/tree/master/src/examples/performances
下一步?
等待DotNetty组件支持NETCore,并进行适配。
继续写Rabbit.Rpc相关的文章。
下一篇应该是,如何在Ubuntu上运行Rabbit.Rpc。
交流方式
QQ群:384413261(RabbitHub)
Email:majian159@live.com
拥抱.NET Core,跨平台的轻量级RPC:Rabbit.Rpc的更多相关文章
- NET Core,跨平台的轻量级RPC
NET Core,跨平台的轻量级RPC:Rabbit.Rpc 特性一览 Apache License 2.0协议开源 支持客户端负载均衡(提供了轮询.随机算法的实现) 支持ZooKeeper和文件共享 ...
- 拥抱.NET Core,如何开发跨平台的应用并部署至Ubuntu运行
之前写了一篇博文宣布Rabbit Rpc跨平台了"拥抱.NET Core,跨平台的轻量级RPC:Rabbit.Rpc",在过程中尝试了如何编写支持跨平台的类库与应用程序,也尝试了在 ...
- 拥抱.NET Core,如何开发一个跨平台类库 (1)
在此前的文章中详细介绍了使用.NET Core的基本知识,如果还没有看,可以先去了解“拥抱.NET Core,学习.NET Core的基础知识补遗”,以便接下来的阅读. 在本文将介绍如何配置类库项目支 ...
- .NET轻量级RPC框架:Rabbit.Rpc
最近准备写一个.NET的管理平台应用在公司,由于存在大量的Client => Server,Server => Client的请求需求在加上之前一直接触了解过RpcClient组件的开发, ...
- Rabbit.Rpc
.NET轻量级RPC框架:Rabbit.Rpc 最近准备写一个.NET的管理平台应用在公司,由于存在大量的Client => Server,Server => Client的请求需求在加上 ...
- 拥抱.NET Core,学习.NET Core的基础知识补遗
前言 .NET Core的新特性之一就是跨平台,但由于对之前框架的兼容导致编写一个.NET Core类库变得相当复杂,主要体现为相当多的框架目标和支持平台,今天我们就对.NET Core的跨平台特性进 ...
- .Net Core跨平台应用研究-HelloArm(串口篇)
引言 为了验证采用dotnet core技术开发的物联网设备数据采集接入服务应用是否能在高性价比的linux嵌入式平台运行,针对dotnet core应用程序进行嵌入式linux环境的发布部署运行验证 ...
- Rabbit RPC 代码阅读(一)
前言 因为想对RPC内部的机制作一个了解,特作以下阅读代码日志,以备忘. RPC介绍 Rabbit RPC 原理可以用3点概括: 1.服务端启动并且向注册中心发送服务信息,注册中心收到后会定时监控服务 ...
- 《ASP.NET Core跨平台开发从入门到实战》Web API自定义格式化protobuf
<ASP.NET Core跨平台开发从入门到实战>样章节 Web API自定义格式化protobuf. 样章 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于 ...
随机推荐
- [异常解决] ubuntukylin16.04 LTS中关于flash安装和使用不了的问题解决
http://www.linuxdiyf.com/linux/25211.html 归纳解决flash插件大法: 启动器中找到 软件更新,启动,点击 其它软件,把Canonical合作伙伴前方框 选上 ...
- 一文搞懂HMM(隐马尔可夫模型)
什么是熵(Entropy) 简单来说,熵是表示物质系统状态的一种度量,用它老表征系统的无序程度.熵越大,系统越无序,意味着系统结构和运动的不确定和无规则:反之,,熵越小,系统越有序,意味着具有确定和有 ...
- Entity Framework 6 Recipes 2nd Edition(9-5)译->删除一个断开的实体
9-5. 删除一个断开的实体 问题 我们要把一个把WCF上取回的对象做上删除的标志. 解决方案 假设我们有如Figure 9-5所示实体的支付与票据的模型. Figure 9-5. 一个支付与票据的模 ...
- 埃尔米特插值问题——用Python进行数值计算
当插值的要求涉及到对插值函数导数的要求时,普通插值问题就变为埃尔米特插值问题.拉格朗日插值和牛顿插值的要求较低,只需要插值函数的函数值在插值点与被插函数的值相等,以此来使得在其它非插值节点插值函数的值 ...
- Linux Nano命令
Nano命令指南 今天在输命令时,无意中输入了nano,对这个命令不太熟悉,结果不知道如何才能退出,保存,赶快查了一下资料,原来是这样的啊. 打开文件与新建文件 使用nano打开或新建文件,只需键入: ...
- SQL Server 批量主分区备份(One Job)
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 案例分析(Case) 实现代码(SQL Codes) 主分区完整.差异还原(Primary B ...
- 搞定.NET MVC IOC控制反转,依赖注入
一直听说IOC,但是一直没接触过,只看例子好像很高达上的样子,今天抽了点时间实现了下,当然也是借助博客园里面很多前辈的文章来搞的!现在做个笔记,防止自己以后忘记! 1.首先创建MVC项目 2.然后新建 ...
- 修改版: 小伙,多线程(GCD)看我就够了,骗你没好处!
多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术.具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能.具有这种能力的系 ...
- [JSP]自定义标签库taglib
自定义标签的步骤 自定义标签的步骤大概有三步: 1.继承javax.servlet.jsp.tagext.*下提供的几个标签类,如Tag.TagSupport.BodyTagSupport.Simpl ...
- [原创]django+ldap实现单点登录(装饰器和缓存)
前言 参考本系列之前的文章,我们已经搭建了ldap并且可以通过django来操作ldap了,剩下的就是下游系统的接入了,现在的应用场景,我是分了2个层次,第一层次是统一认证,保证各个系统通过ldap来 ...