
- 使用zookeeper服务发现
- 使用长连接TCP池,netty作为网络IO,支持全双工通信
- 消息发送支持异步/同步,NIO
- 自动选择符合action节点服务器,支持权重分发消息
- 欢迎学习交流~

Demo
Node
//open node server 1
NodeInfo nodeInfo = NodeRegistry.buildNode();//read application.properties
//sync callback
NodeLauncher.start(nodeInfo, new MessageListener() {
@Override
public byte[] onMessage(Async async, byte[] message) {
return ("Hello! node1 callback -" + new String(message)).getBytes();
}
});
//open node server 2
NodeInfo nodeInfo2 = new NodeInfo();
nodeInfo2.setZkIps("127.0.0.1:2181");
nodeInfo2.setZkPath("/qsrpc");
nodeInfo2.setAction("order");
nodeInfo2.setIp("127.0.0.1");
nodeInfo2.setPort(8848);
nodeInfo2.setWeight(2);
//async callback
NodeLauncher.start(nodeInfo2, new MessageListener() {
@Override
public byte[] onMessage(final Async async, final byte[] message) {
new Thread(new Runnable() {
@Override
public void run() {
async.callBack(("Hello! node2 callback -" + new String(message)).getBytes());
}
}).start();
return null;
}
});
Client
//async
for (int i = 0; i < 9; i++) {
RPCClientManager.getInstance().sendAsync("user", "user".getBytes(),
new Callback<byte[]>() {
@Override
public void handleResult(byte[] result) {
System.out.println("send [user] Result: " + new String(result));
}
@Override
public void handleError(Throwable error) {
error.printStackTrace();
}
});
}
System.out.println("send [user] Done");
//sync
for (int i = 0; i < 9; i++) {
Thread.sleep(1000);
byte[] msg_cb = RPCClientManager.getInstance().sendSync("order", "order".getBytes());
System.out.println("send [order] Result: " + new String(msg_cb));
}
System.out.println("send [order] Done");
application.properties
qsrpc.zk.ips=127.0.0.1:2181
qsrpc.zk.path=/qsrpc
qsrpc.node.ip=127.0.0.1
qsrpc.node.port=19980
qsrpc.node.action=user,order
qsrpc.node.weight=1
Maven
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
<dependency>
<groupId>com.github.tohodog</groupId>
<artifactId>QSRPC</artifactId>
<version>1.0.0</version>
</dependency>
项目地址: github.com/tohodog/QSR…