Jprotobuf-rpc-socket 使用教程
项目介绍
Jprotobuf-rpc-socket 是一个基于 TCP 协议的二进制 RPC 通信协议的 Java 实现。它使用 Google 的 Protocol Buffers(Protobuf)作为数据交换格式,支持完全基于 POJO 的发布方式,极大地简化了开发复杂性。该项目具有以下特点:
- 完全支持 POJO 方式发布
- 使用简单
- 内置连接池,具备更高的性能和低延迟
- 支持自动重连功能
- 支持客户端的负载均衡功能
- 支持附件发送和压缩功能(GZip 与 Snappy)
- 支持多包拆分与合并功能
- 支持多级超时设定
- 支持 RPC 服务元数据动态生成
- 集成内置 HTTP 管理功能
项目快速启动
环境要求
- JDK 6+
Maven 依赖
<dependency>
<groupId>com.baidu</groupId>
<artifactId>jprotobuf-rpc-core</artifactId>
<version>4.2.1</version>
</dependency>
<!-- 提供 Spring 扩展 -->
<dependency>
<groupId>com.baidu</groupId>
<artifactId>jprotobuf-rpc-core-spring</artifactId>
<version>4.2.1</version>
</dependency>
<!-- 提供 Spring Boot 扩展 -->
<dependency>
<groupId>com.baidu</groupId>
<artifactId>jprotobuf-rpc-spring-starter</artifactId>
<version>4.2.1</version>
</dependency>
<!-- 基于 Redis 实现服务注册发现功能 -->
<dependency>
<groupId>com.baidu</groupId>
<artifactId>jprotobuf-rpc-registry-redis</artifactId>
<version>4.2.1</version>
</dependency>
使用 Jprotobuf 预编译插件进行预编译
<plugin>
<groupId>com.baidu</groupId>
<artifactId>jprotobuf-precompile-plugin</artifactId>
<version>1.2.8</version>
<configuration>
<skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
<filterClassPackage>com.baidu</filterClassPackage>
</configuration>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>precompile</goal>
</goals>
</execution>
</executions>
</plugin>
Maven 执行命令
mvn jprotobuf:precompile
或
mvn package
应用案例和最佳实践
案例一:简单的 RPC 服务
-
定义 Protobuf 消息
message Request { required string message = 1; } message Response { required string result = 1; }
-
编写服务接口
public interface EchoService { Response echo(Request request); }
-
实现服务接口
public class EchoServiceImpl implements EchoService { @Override public Response echo(Request request) { Response response = new Response(); response.setResult("Echo: " + request.getMessage()); return response; } }
-
启动 RPC 服务
public class ServerMain { public static void main(String[] args) { RpcServer server = new RpcServer(8080); server.registerService(new EchoServiceImpl()); server.start(); } }
-
客户端调用
public class ClientMain { public static void main(String[] args) { RpcClient client = new RpcClient("localhost", 8080); EchoService echoService = client.getProxy(EchoService.class); Request request = new Request(); request.setMessage("Hello, Jprotobuf-rpc-socket!"); Response response = echoService.echo(request); System.out.println(response.getResult()); } }