zoukankan      html  css  js  c++  java
  • JRPC 轻量级RPC框架

    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
  • 相关阅读:
    POJ 1141 括号匹配 DP
    881. Boats to Save People
    870. Advantage Shuffle
    874. Walking Robot Simulation
    文件操作
    861. Score After Flipping Matrix
    860. Lemonade Change
    842. Split Array into Fibonacci Sequence
    765. Couples Holding Hands
    763. Partition Labels
  • 原文地址:https://www.cnblogs.com/xingzc/p/6289676.html
Copyright © 2011-2022 走看看