Jprotobuf-rpc-socket
====================
## Build status
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.baidu/jprotobuf-rpc-core/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.baidu/jprotobuf-rpc-core)
Protobuf RPC是一种基于TCP协议的二进制高性能RPC通信协议实现。它以Protobuf作为基本的数据交换格式,支持完全基于POJO的发布方式,极大的简化了开发复杂性。<br>
Features:<br>
- 完全支持POJO方式发布,使用非常简单
- 内置连接池,具备更高的性能,低延迟 QPS: 5w+
- 支持自动重连功能
- Client支持Ha的负载均衡功能
- 支持附件发送
- 压缩功能,支持GZip与Snappy
- 支持多包拆分与合并功能
- 支持多级超时设定,灵活控制请求超时时间
- 支持RPC服务元数据动态生成,简单易用
- 集成内置HTTP管理功能(3.1.1版本+)
关联项目:
[https://github.com/jhunters/jprotobuf](https://github.com/jhunters/jprotobuf "https://github.com/jhunters/jprotobuf")<br>
golang 协议实现: [https://github.com/baidu-golang/baidurpc](https://github.com/baidu-golang/baidurpc "https://github.com/baidu-golang/baidurpc")
## 使用示例 ##
环境要求:JDK 6+
```xml
<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 pre compile插件进行预编译,提升启动速度
```xml
<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>
```
filterClassPackage 用来指定进行预编译时需要扫描的package,目前只支持配置一个package名称<br>
maven执行命令如下:<br>
```property
mvn jprotobuf:precompile
or
mvn package
```
[下载发行包](http://repo1.maven.org/maven2/com/baidu/jprotobuf-rpc-core/)
#### Qucik Start ####
Jprotobuf-rpc-socket基于JProtobuf基础上开发,可帮助大家开发中省去编写Google Protobuf的IDL描述文件的过程。
##### 客户端开发 #####
1.EchoService功用实现
EchoService 提供一个echo方法 ,参数对象EchoInfo只有一个message属性。
下面是EchoInfo对象定义
```java
public class EchoInfo {
@Protobuf
public String message;
}
```
注解方式的定义可以极大简化大家的工作量,上面等同于下面的IDEL配置
```property
package pkg;
option java_package = "com.baidu.bjf.remoting.protobuf.rpc";
//这里声明输出的java的类名
option java_outer_classname = "EchoInfo";
message InterClassName {
required string message = 1;
}
```
2.定义EchoService接口
```java
public interface EchoService {
/**
* To define a RPC client method. <br>
* serviceName is "echoService"
* methodName is use default method name "echo"
* onceTalkTimeout is 200 milliseconds
*
* @param info
* @return
*/
@ProtobufRPC(serviceName = "echoService", onceTalkTimeout = 200)
EchoInfo echo(EchoInfo info);
}
```
RPC的方法必须要指定@ProtobufRPC注解. serviceName与methodName要与服务端保持一致。
这里未指定methodName,则使用方法的名称 "echo"
3.创建RPC Client进行访问
```java
RpcClient rpcClient = new RpcClient();
// 创建EchoService代理
ProtobufRpcProxy<EchoService> pbrpcProxy = new ProtobufRpcProxy<EchoService>(rpcClient, EchoService.class);
pbrpcProxy.setPort(1031);
// 动态生成代理实例
EchoService echoService = pbrpcProxy.proxy();
EchoInfo request = new EchoInfo();
request.message = "hello";
EchoInfo response = echoService.echo(request);
rpcClient.stop();
```
##### 服务端开发 #####
1.开发服务实现类
```java
public class EchoServiceImpl {
@ProtobufRPCService(serviceName = "echoService", methodName = "echo")
public EchoInfo doEcho(EchoInfo info) {
EchoInfo ret = new EchoInfo();
ret.setMessage("hello:" + info.message);
return ret;
}
}
```
服务发布的RPC方法必须用@ProtobufPRCService注解进行标识
2.发布RPC服务
```java
RpcServer rpcServer = new RpcServer();
EchoServiceImpl echoServiceImpl = new EchoServiceImpl();
rpcServer.registerService(echoServiceImpl);
rpcServer.start(1031);
```
上面的代码实现把 EchoServiceImpl 的RPC服务发布出去
[更多使用说明](https://github.com/Baidu-ecom/Jprotobuf-rpc-socket/wiki/User-Guide)
## 性能测试 ##
机器配置:
- Linux 64G内存 6核 12线程
- Intel(R) Xeon(R) CPU E5645 @ 2.40GHz
性能测试结果如下(客户端与服务端部署在同一台机器中):
单线程:平均QPS: 9000+
多线程:QPS: 最高 40000+
```property
---------------------Performance Result-------------------------
send byte size: 44;receive byte size: 50
| total count| time took(ms)| average(ms)| QPS| threads|
| 100000| 11807| 0| 8469| 1|
---------------------Performance Result-------------------------
---------------------Performance Result-------------------------
send byte size: 44;receive byte size: 50
| total count| time took(ms)| average(ms)| QPS| threads|
| 100000| 10407| 0| 9608| 1|
---------------------Performance Result-------------------------
---------------------Performance Result-------------------------
send byte size: 1139;receive byte size: 1139
| total count| time took(ms)| average(ms)| QPS| threads|
| 100000| 11513| 0| 8685| 1|
---------------------Performance Result-------------------------
---------------------Performance Result-------------------------
send byte size: 44;receive byte size: 50
| total count| time took(ms)| average(ms)| QPS| threads|
| 100000| 5904| 0| 16937| 2|
---------------------Performance Result-------------------------
---------------------Performance Result-------------------------
send byte size: 44;receive byte size: 50
| total count| time took(ms)| average(ms)| QPS| threads|
| 100000| 3754| 0| 26638| 4|
---------------------Performance Result-------------------------
---------------------Performance Result-------------------------
send byte size: 44;receive byte size: 50
| total count| time took(ms)| average(ms)| QPS| threads|
| 100000| 1736| 0| 57603| 20|
---------------------Performance Result-------------------------
--------------
没有合适的资源?快使用搜索试试~ 我知道了~
Protobuf RPC是一种基于TCP协议的二进制RPC通信协议的Java实现.zip
共274个文件
java:237个
xml:25个
gitignore:3个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 181 浏览量
2024-03-23
23:17:37
上传
评论
收藏 369KB ZIP 举报
温馨提示
Protobuf RPC是一种基于TCP协议的二进制RPC通信协议的Java实现
资源推荐
资源详情
资源评论
收起资源包目录
Protobuf RPC是一种基于TCP协议的二进制RPC通信协议的Java实现.zip (274个子文件)
spring.factories 109B
.factorypath 5KB
.gitignore 2KB
.gitignore 9B
.gitignore 9B
package.html 93B
package.html 92B
package.html 88B
StringUtils.java 36KB
ProtobufRpcProxy.java 25KB
LoadBalanceProxyFactoryBean.java 22KB
ProtobufRpcAnnotationResolver.java 22KB
RpcDataPackage.java 21KB
EchoInfoClass.java 21KB
CommonAnnotationBeanPostProcessor.java 20KB
DynamicProtobufRpcProxy.java 20KB
RpcClientOptions.java 16KB
CommonAnnotationBeanPostProcessor.java 16KB
HaProtobufRpcProxy.java 14KB
RedisRegistryService.java 14KB
RpcServer.java 14KB
RpcServerOptions.java 14KB
AbstractAnnotationRpcHandler.java 12KB
RpcServiceRegistry.java 12KB
RpcServiceHandler.java 11KB
RedisClient.java 11KB
RoundRobinLoadBalanceStrategy.java 10KB
ServerStatus.java 10KB
EchoServicePerformanceTest.java 10KB
NetUtils.java 9KB
RpcMeta.java 9KB
PlaceholderResolver.java 9KB
RpcDataPackageDecoder.java 9KB
RpcMethodInfo.java 8KB
RpcClient.java 8KB
RpcRequestMeta.java 8KB
HaRpcProxyFactoryBean.java 8KB
EchoServicePerformanceTest.java 8KB
ErrorCodes.java 8KB
NamingServiceChangeListener.java 7KB
RpcServiceExporter.java 7KB
BNSNamingServiceOld.java 7KB
EchoServiceTest.java 6KB
RpcServiceMetaServiceProvider.java 6KB
HaEchoServiceTest.java 6KB
HaEchoServiceTest.java 6KB
RpcProxyFactoryBean.java 6KB
BNSNamingService.java 6KB
RpcServerPipelineInitializer.java 6KB
RedisCacheableJdkCompiler.java 5KB
BaseEchoServiceTest.java 5KB
HaEchoServiceTestBase.java 5KB
HaEchoServiceTestBase.java 5KB
Trace.java 5KB
RpcDataPackageTest.java 5KB
RpcClientCallState.java 5KB
RecoverHeartbeat.java 5KB
JedisPool.java 5KB
RpcChannel.java 5KB
HttpServerInboundHandler.java 5KB
EchoServiceImpl.java 5KB
RpcMetaExporter.java 5KB
ChannelPoolObjectFactory.java 4KB
AnnotationParserCallback.java 4KB
ChunkInfo.java 4KB
RegisterInfo.java 4KB
RpcClientPipelineinitializer.java 4KB
RpcResponseMeta.java 4KB
RpcRequestMetaExtField.java 4KB
SimpleBean.java 4KB
MetaExportHelper.java 4KB
BusinessExceptionTest.java 4KB
RpcHeadMeta.java 4KB
AnnotationRpcXmlConfigurationTest.java 4KB
AnnotationRpcXmlConfigurationTest.java 4KB
HttpServer.java 4KB
ReflectionUtils.java 4KB
RpcServiceMeta.java 4KB
RpcProxyTest.java 4KB
RpcProxyTest.java 4KB
SimpleBean.java 4KB
RpcClientServiceHandler.java 4KB
ChannelPool.java 4KB
SocketFailOverInterceptor.java 4KB
MapUtils.java 4KB
PojoRpcMethodInfo.java 4KB
HaProtobufRpcProxyBean.java 4KB
RpcChannelErrorException.java 3KB
MethodInvocationInfo.java 3KB
ErrorDataException.java 3KB
RpcData.java 3KB
EchoService.java 3KB
RpcRequestMetaTest.java 3KB
RpcMetaTest.java 3KB
HaRpcXmlConfigurationTest.java 3KB
HaRpcXmlConfigurationTest.java 3KB
IDLServiceExporter.java 3KB
BaseEchoServiceTest.java 3KB
Connection.java 3KB
MessageGeneratedRpcHandler.java 3KB
共 274 条
- 1
- 2
- 3
资源评论
Kwan的解忧杂货铺
- 粉丝: 1w+
- 资源: 3625
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功