JRPC 轻量级RPC框架
JRPC是一个轻量级的java RPC框架。它支持服务注册和发现。
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框架的更多相关文章
- 微博轻量级RPC框架Motan
Motan 是微博技术团队研发的基于 Java 的轻量级 RPC 框架,已在微博内部大规模应用多年,每天稳定支撑微博上亿次的内部调用.Motan 基于微博的高并发和高负载场景优化,成为一套简单.易用. ...
- C# 的轻量级 RPC 框架
Redola.Rpc 的一个小目标 Redola.Rpc 的一个小目标 Redola.Rpc 的一个小目标:20000 tps. Concurrency level: 8 threads Comple ...
- 微博轻量级RPC框架Motan正式开源:支撑千亿调用
支撑微博千亿调用的轻量级 RPC 框架 Motan 正式开源了,项目地址为https://github.com/weibocom/motan. 微博轻量级RPC框架Motan正式开源 Motan 是微 ...
- 轻量级RPC框架开发
nio和传统io之间工作机制的差别 自定义rpc框架的设计思路 rpc框架的代码运行流程 第2天 轻量级RPC框架开发 今天内容安排: 1.掌握RPC原理 2.掌握nio操作 3.掌握netty简单的 ...
- 基于Netty和SpringBoot实现一个轻量级RPC框架-协议篇
基于Netty和SpringBoot实现一个轻量级RPC框架-协议篇 前提 最近对网络编程方面比较有兴趣,在微服务实践上也用到了相对主流的RPC框架如Spring Cloud Gateway底层也切换 ...
- 基于Netty和SpringBoot实现一个轻量级RPC框架-Server篇
前提 前置文章: Github Page:<基于Netty和SpringBoot实现一个轻量级RPC框架-协议篇> Coding Page:<基于Netty和SpringBoot实现 ...
- 基于Netty和SpringBoot实现一个轻量级RPC框架-Client篇
前提 前置文章: <基于Netty和SpringBoot实现一个轻量级RPC框架-协议篇> <基于Netty和SpringBoot实现一个轻量级RPC框架-Server篇> 前 ...
- 基于Netty和SpringBoot实现一个轻量级RPC框架-Client端请求响应同步化处理
前提 前置文章: <基于Netty和SpringBoot实现一个轻量级RPC框架-协议篇> <基于Netty和SpringBoot实现一个轻量级RPC框架-Server篇> & ...
- Netty + Spring + ZooKeeper搭建轻量级RPC框架
本文参考 本篇文章主要参考自OSCHINA上的一篇"轻量级分布式 RPC 框架",因为原文对代码的注释和讲解较少,所以我打算对这篇文章的部分关键代码做出一些详细的解释 在本篇文章中 ...
随机推荐
- 好的 小图标 html
只需引用样式,加入字体文件到项目中就可实现 <link href="css/font-awesome.min.css" rel="stylesheet"& ...
- HDU 2489 Minimal Ratio Tree (DFS枚举+最小生成树Prim)
Minimal Ratio Tree Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) ...
- android 5.0新特性学习--视图轮廓
ViewOutlineProvider -- 视图轮廓setOutlineProvider--可以使用View.setClipToOutline方法去剪切一个视图的outline区域.只有rectan ...
- hdu_5179_beautiful number(数位DP)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5179 题意:给你一个范围,问你漂亮的数有多少个,漂亮的数的定义为 数位高的比数位低的大,并且 数位高的 ...
- 使用nodejs的net模块创建TCP服务器
使用nodejs的net模块创建TCP服务器 laiqun@msn.cn Contents 1. 代码实现 2. 使用telnet连接服务器测试 3. 创建一个TCP的client 1. 代码实现 ; ...
- Servlet程序开发--Servlet简介
使用java语言开发的服务器端程序,可以生成动态web页,运行在服务器端,由服务器调用执行,是一种按照servlet标准开发的类. 先有servlet,后有jsp,jsp骨子里依然是servlet. ...
- new关键字的理解-问题型
//输出的结果是?????????//The answer is good and gbc public class Example { String str=new String("goo ...
- div定位
1.float定位带来的问题<html> <head> <title>div浮动引发的问题</title> </head> <styl ...
- DWR整合之JSF
DWR 与 JSF DWR 包括两个 JSF 的扩展点,一个创造器和一个 ServletFilter. 1.JSF Creator DWR1.1 中有一个体验版的 JsfCreator.你可以在 dw ...
- View如何设置16进制颜色值
View.setBackgroundColor(Color.parseColor("#F3733F"));