代码拉取完成,页面将自动刷新
同步操作将从 PANDA/Panda-Rpc-Framework 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
Panda-RPC-Framework 是一款基于 Nacos 实现的 RPC 框架。网络传输实现了基于 Java 原生 Socket 与 Netty 版本,并且实现了多种序列化与负载均衡算法。
消费者调用提供者的方式取决于消费者的客户端选择,如选用原生 Socket 则该步调用使用 BIO,如选用 Netty 方式则该步调用使用 NIO。如该调用有返回值,则提供者向消费者发送返回值的方式同理。
调用参数与返回值的传输采用了如下 PRF 协议( Panda-RPC-Framework 首字母)以防止粘包:
+---------------+---------------+-----------------+-------------+
| Magic Number | Package Type | Serializer Type | Data Length |
| 4 bytes | 4 bytes | 4 bytes | 4 bytes |
+---------------+---------------+-----------------+-------------+
| Data Bytes |
| Length: ${Data Length} |
+---------------------------------------------------------------+
字段 | 解释 |
---|---|
Magic Number | 魔数,表识一个 PRF 协议包,0xCAFEBABE |
Package Type | 包类型,标明这是一个调用请求还是调用响应 |
Serializer Type | 序列化器类型,标明这个包的数据的序列化方式 |
Data Length | 数据字节的长度 |
Data Bytes | 传输的对象,通常是一个RpcRequest 或RpcClient 对象,取决于Package Type 字段,对象的序列化方式取决于Serializer Type 字段。 |
package top.panda.rpc.api;
public interface HelloService {
String hello(String name);
}
package top.panda.test;
import top.panda.rpc.api.HelloService;
@Service
public class HelloServiceImpl implements HelloService {
@Override
public String hello(String name) {
return "Hello, " + name;
}
}
package top.panda.test;
import top.panda.rpc.api.HelloService;
import top.panda.rpc.serializer.CommonSerializer;
import top.panda.rpc.transport.netty.server.NettyServer;
@ServiceScan
public class NettyTestServer {
public static void main(String[] args) {
NettyServer server = new NettyServer("127.0.0.1", 9999, CommonSerializer.PROTOSTUFF_SERIALIZER);
server.start();
}
}
这里选用 Netty 传输方式,并且指定序列化方式为 Google Protostuff 方式。
package top.panda.test;
import top.panda.rpc.api.HelloService;
import top.panda.rpc.serializer.CommonSerializer;
import top.panda.rpc.transport.RpcClient;
import top.panda.rpc.transport.RpcClientProxy;
import top.panda.rpc.transport.netty.client.NettyClient;
public class NettyTestClient {
public static void main(String[] args) {
RpcClient client = new NettyClient(CommonSerializer.KRYO_SERIALIZER, new RoundRobinLoadBalancer());
RpcClientProxy rpcClientProxy = new RpcClientProxy(client);
HelloService helloService = rpcClientProxy.getProxy(HelloService.class);
String res = helloService.hello("panda");
System.out.println(res);
}
}
这里客户端也选用了 Netty 的传输方式,序列化方式采用 Kryo 方式,负载均衡策略指定为轮转方式。
在此之前请确保 Nacos 运行在本地 8848
端口。
首先启动服务提供者,再启动消费者,在消费侧会输出Hello, panda
。
Panda-RPC-Framework is under the MIT license. See the LICENSE file for details.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。