JRPC is a lightweight Java RPC framework. It enables quick and easy development of RPC applications. It greatly simplifies RPC programming.
- Unified API for client and server
- Support a variety of serialization protocol at the same time - Jackson and Protobuff
- Layered architecture, including API layer, Proxy layer, Invoke layer, Protocol layer, Transport layer
- Pluggable service discovery - registry with Zookeeper
- The transport layer of the extensible implementation - mina, netty4, netty5
- Out of the box client-side and server-side API
- Spring integration friendly
- Efficient custom RPC protocol
- High-performance NIO socket frame support - mina and netty
select transport implement, add 'mina' or 'netty' dependency:
<dependency> <groupId>com.dinstone.jrpc</groupId> <artifactId>jrpc-transport-mina</artifactId> <version>3.2.0</version> </dependency>
or
<dependency> <groupId>com.dinstone.jrpc</groupId> <artifactId>jrpc-transport-netty4</artifactId> <version>3.2.0</version> </dependency>
if you need service registry and discovery, please add dependencies :
<dependency> <groupId>com.dinstone.jrpc</groupId> <artifactId>jrpc-registry-zookeeper</artifactId> <version>3.2.0</version> </dependency>
If you are integrated with Spring, please add dependencies :
<dependency> <groupId>com.dinstone.jrpc</groupId> <artifactId>jrpc-spring</artifactId> <version>3.2.0</version> </dependency>
For more details, please refer to the example project : jrpc-example
// setting endpoint config EndpointConfig econfig = new EndpointConfig().setEndpointName("example-service-provider"); // setting registry config RegistryConfig rconfig = new RegistryConfig().setSchema("zookeeper").addProperty("zookeeper.node.list", "localhost:2181"); // setting transport config TransportConfig tconfig = new TransportConfig().setSchema("mina").addProperty("rpc.handler.count", "2"); Server server = null; try { ServerBuilder builder = new ServerBuilder().bind("localhost", 4444); // build server and start it server = builder.endpointConfig(econfig).registryConfig(rconfig).transportConfig(tconfig).build(); server.start(); // export service server.exportService(HelloService.class, new HelloServiceImpl()); System.in.read(); } finally { if (server != null) { server.stop(); } }
EndpointConfig endpointConfig = new EndpointConfig().setEndpointId("consumer-1") .setEndpointName("example-service-consumer"); RegistryConfig registryConfig = new RegistryConfig().setSchema("zookeeper").addProperty("zookeeper.node.list", "localhost:2181"); TransportConfig transportConfig = new TransportConfig().setSchema("netty").setConnectPoolSize(2); Client client = new ClientBuilder().endpointConfig(endpointConfig).registryConfig(registryConfig) .transportConfig(transportConfig).build(); HelloService helloService = client.importService(HelloService.class); helloService.sayHello("dinstone"); client.destroy();
<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>
<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>
-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
For more details, please refer to the benchmark project : jrpc-benchmark