JRPC是一个轻量级的java RPC框架。它支持服务注册和发现。

目前它开源了,地址为:https://github.com/dinstone/jrpc。

Quick Start

step 1:

git clone https://github.com/dinstone/jrpc.git

step 2:

maven install.

step 3:

select transport implement,add 'mina' or 'netty' dependency:

<dependency>
<groupId>com.dinstone.jrpc</groupId>
<artifactId>jrpc-transport-mina</artifactId>
<version>${jrpc.version}</version>
</dependency>

or

<dependency>
<groupId>com.dinstone.jrpc</groupId>
<artifactId>jrpc-transport-netty4</artifactId>
<version>${jrpc.version}</version>
</dependency>

if you need service registry and discovery, please add dependencies :

<dependency>
<groupId>com.dinstone.jrpc</groupId>
<artifactId>jrpc-registry-zookeeper</artifactId>
<version>${jrpc.version}</version>
</dependency>

If you are integrated with Spring, please add dependencies :

<dependency>
<groupId>com.dinstone.jrpc</groupId>
<artifactId>jrpc-spring</artifactId>
<version>${jrpc.version}</version>
</dependency>

Example

For more details, please refer to the example project : jrpc-example

java programming by API

export service:

Server server = new Server("localhost", 4444);
ServiceExporter serviceExporter = server.getServiceExporter();
serviceExporter.exportService(HelloService.class, new HelloServiceImpl()); System.in.read(); server.destroy();

import service:

Client client = new Client("localhost", 4444);
ServiceImporter serviceImporter = client.getServiceImporter();
HelloService helloService = serviceImporter.importService(HelloService.class);
helloService.sayHello("dinstone"); client.destroy();

declarative programming by Spring

export service:

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jrpc="http://www.dinstone.com/schema/jrpc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.dinstone.com/schema/jrpc http://www.dinstone.com/schema/jrpc-3.0.xsd"> <jrpc:server>
<jrpc:registry schema="zookeeper">
<jrpc:property key="zookeeper.node.list" value="localhost:2181" />
</jrpc:registry>
<jrpc:transport schema="mina" address="-:2001" />
</jrpc:server>
<jrpc:service interface="com.dinstone.jrpc.example.HelloService" implement="helloService" group="product-v1.0" timeout="2000" /> <bean id="helloService" class="com.dinstone.jrpc.example.HelloServiceImpl" />
</beans>

import service:

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jrpc="http://www.dinstone.com/schema/jrpc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.dinstone.com/schema/jrpc http://www.dinstone.com/schema/jrpc-3.0.xsd"> <jrpc:client name="netty-client">
<jrpc:registry schema="zookeeper">
<jrpc:property key="zookeeper.node.list" value="localhost:2181" />
</jrpc:registry>
<jrpc:transport schema="netty">
<jrpc:property key="rpc.serialize.type" value="2" />
</jrpc:transport>
</jrpc:client>
<jrpc:reference id="rhsv1" interface="com.dinstone.jrpc.example.HelloService" group="product-v1.0" />
</beans>

Test Result

JVM Parameter

-server -Xmx1g -Xms1g -Xmn712m -XX:PermSize=128m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70

Case: Server[netty5] Client[netty5]

1 Threads,  500 Bytes,  4824 ms,    AVG: 2072 tps
10 Threads, 500 Bytes, 17325 ms, AVG: 5772 tps
20 Threads, 500 Bytes, 13456 ms, AVG: 14863 tps
32 Threads, 500 Bytes, 11134 ms, AVG: 28740 tps
1 Threads, 1024 Bytes, 1101 ms, AVG: 9082 tps
10 Threads, 1024 Bytes, 5809 ms, AVG: 17214 tps
20 Threads, 1024 Bytes, 9108 ms, AVG: 21958 tps
32 Threads, 1024 Bytes, 14622 ms, AVG: 21884 tps
40 Threads, 1024 Bytes, 17692 ms, AVG: 22609 tps

Case: Server[netty5] Client[mina]

1 Threads,  500 Bytes,  994 ms, AVG: 10060 tps
10 Threads, 500 Bytes, 4516 ms, AVG: 22143 tps
20 Threads, 500 Bytes, 8555 ms, AVG: 23378 tps
32 Threads, 500 Bytes, 13801 ms, AVG: 23186 tps
1 Threads, 1024 Bytes, 1027 ms, AVG: 9737 tps
10 Threads, 1024 Bytes, 6488 ms, AVG: 15413 tps
20 Threads, 1024 Bytes, 12776 ms, AVG: 15654 tps
32 Threads, 1024 Bytes, 20318 ms, AVG: 15749 tps
40 Threads, 1024 Bytes, 26149 ms, AVG: 15296 tps

Case: Server[mina] Client[mina]

1 Threads,  500 Bytes,  919 ms, AVG: 10881 tps
10 Threads, 500 Bytes, 2437 ms, AVG: 41034 tps
20 Threads, 500 Bytes, 4149 ms, AVG: 48204 tps
32 Threads, 500 Bytes, 6694 ms, AVG: 47804 tps
1 Threads, 1024 Bytes, 957 ms, AVG: 10449 tps
10 Threads, 1024 Bytes, 3168 ms, AVG: 31565 tps
20 Threads, 1024 Bytes, 6071 ms, AVG: 32943 tps
32 Threads, 1024 Bytes, 9485 ms, AVG: 33737 tps
40 Threads, 1024 Bytes, 11735 ms, AVG: 34086 tps

Case: Server[mina] Client[netty5]

1 Threads,  500 Bytes,  1046 ms,    AVG: 9560 tps
10 Threads, 500 Bytes, 5234 ms, AVG: 19105 tps
20 Threads, 500 Bytes, 6962 ms, AVG: 28727 tps
32 Threads, 500 Bytes, 9193 ms, AVG: 34809 tps
1 Threads, 1024 Bytes, 1096 ms, AVG: 9124 tps
10 Threads, 1024 Bytes, 5069 ms, AVG: 19727 tps
20 Threads, 1024 Bytes, 6591 ms, AVG: 30344 tps
32 Threads, 1024 Bytes, 10526 ms, AVG: 30400 tps
40 Threads, 1024 Bytes, 12216 ms, AVG: 32743 tps

JRPC 轻量级RPC框架的更多相关文章

  1. 微博轻量级RPC框架Motan

    Motan 是微博技术团队研发的基于 Java 的轻量级 RPC 框架,已在微博内部大规模应用多年,每天稳定支撑微博上亿次的内部调用.Motan 基于微博的高并发和高负载场景优化,成为一套简单.易用. ...

  2. C# 的轻量级 RPC 框架

    Redola.Rpc 的一个小目标 Redola.Rpc 的一个小目标 Redola.Rpc 的一个小目标:20000 tps. Concurrency level: 8 threads Comple ...

  3. 微博轻量级RPC框架Motan正式开源:支撑千亿调用

    支撑微博千亿调用的轻量级 RPC 框架 Motan 正式开源了,项目地址为https://github.com/weibocom/motan. 微博轻量级RPC框架Motan正式开源 Motan 是微 ...

  4. 轻量级RPC框架开发

    nio和传统io之间工作机制的差别 自定义rpc框架的设计思路 rpc框架的代码运行流程 第2天 轻量级RPC框架开发 今天内容安排: 1.掌握RPC原理 2.掌握nio操作 3.掌握netty简单的 ...

  5. 基于Netty和SpringBoot实现一个轻量级RPC框架-协议篇

    基于Netty和SpringBoot实现一个轻量级RPC框架-协议篇 前提 最近对网络编程方面比较有兴趣,在微服务实践上也用到了相对主流的RPC框架如Spring Cloud Gateway底层也切换 ...

  6. 基于Netty和SpringBoot实现一个轻量级RPC框架-Server篇

    前提 前置文章: Github Page:<基于Netty和SpringBoot实现一个轻量级RPC框架-协议篇> Coding Page:<基于Netty和SpringBoot实现 ...

  7. 基于Netty和SpringBoot实现一个轻量级RPC框架-Client篇

    前提 前置文章: <基于Netty和SpringBoot实现一个轻量级RPC框架-协议篇> <基于Netty和SpringBoot实现一个轻量级RPC框架-Server篇> 前 ...

  8. 基于Netty和SpringBoot实现一个轻量级RPC框架-Client端请求响应同步化处理

    前提 前置文章: <基于Netty和SpringBoot实现一个轻量级RPC框架-协议篇> <基于Netty和SpringBoot实现一个轻量级RPC框架-Server篇> & ...

  9. Netty + Spring + ZooKeeper搭建轻量级RPC框架

    本文参考 本篇文章主要参考自OSCHINA上的一篇"轻量级分布式 RPC 框架",因为原文对代码的注释和讲解较少,所以我打算对这篇文章的部分关键代码做出一些详细的解释 在本篇文章中 ...

随机推荐

  1. C语言版的16进制与字符串互转函数

    http://www.cnblogs.com/nio-nio/p/3309367.html /* // C prototype : void StrToHex(BYTE *pbDest, BYTE * ...

  2. [转]理解SSL(https)中的对称加密与非对称加密

    加密 解密 Tweet   密码学最早可以追溯到古希腊罗马时代,那时的加密方法很简单:替换字母. 早期的密码学 古希腊人用一种叫 Scytale 的工具加密.更快的工具是 transposition ...

  3. mplayer最全的命令

    前段时间做过qt内嵌mplayer的一个小程序,感觉mplayer还行不过不支持打开图片感觉有点无力.话不多说上代码: QString path="d:/1.mkv"; QWidg ...

  4. html base2

    <html> <body> <h1>My First Web Page</h1> <p id="demo">A Para ...

  5. Windows API 之 CreateToolhelp32Snapshot

    CreateToolhelp32Snapshot: 参考: https://msdn.microsoft.com/en-us/library/ms682489%28VS.85%29.aspx HAND ...

  6. 休眠唤醒不断开wifi.

    文件: /home/mxy/code/v1/frameworks/base/services/java/com/auto/opandora/Opandora.java 屏蔽掉: 957 SetWifi ...

  7. 手机电话号码吉凶查询原理及ASP算法源码 转

    随着手机的快速普及,越来越多的人都在使用手机,而号码的挑选也是用户越来越关心的事情.虽然号码只是个代号而已,但几千年的传统积淀仍给号码赋予其各种含义,至于号码的吉凶也是见仁见智的一种个人喜好问题,或许 ...

  8. docker私有仓库搭建(ubuntu 14.04和centos7)

    最近是在做一个关于docker云化的项目,马上就要开始实战.下午先做了一个私有仓库搭建的实验,先大概做个笔记,有兴趣的蛮看一下吧. 先在所有机子上都安装上docker,我的是两台ubuntu,分别是1 ...

  9. java dom4j解析xml实例(2)

    java利用dom4j解析xml 需要的jar包: dom4j官方网站在 http://www.dom4j.org/ 下载dom4j-1.6.1.zip 解开后有两个包,仅操作XML文档的话把dom4 ...

  10. LCD12864 液晶显示-汉字及自定义显示(并口)

    LCD12864带字库,型号:CM12864-12.其相关数据手册可以在百度中搜索“ST7920 系列中文图形液晶模块使用说明书”,里面有详细的介绍.这里就不在多描述. 其原理简图:(我们只需关心接口 ...