luger1990 opened a new issue, #10897:
URL: https://github.com/apache/dubbo/issues/10897
grpc有流式服务和非流式服务,上传文件使用triple协议应该怎么选择呢?选择流式服务肯定是没问题的,但是调用方用起来太难受。下面是例子
proto定义
```
syntax = "proto3";
option java_multiple_files = true;
option java_package = "com.nct.player.upload";
option java_outer_classname = "NctFileUpload";
option objc_class_prefix = "HLW";
package com.nct.player.upload;
service NctFileUploadRpc {
rpc upload(stream NctFileUploadParam) returns (NctFileUploadDto);
rpc upload1(NctFileUploadParam) returns (NctFileUploadDto);
}
//Upload
message NctFileUploadParam {
string fileName = 1;
bytes stream = 2;
}
message NctFileUploadDto {
string filePath = 1;
}
```
实现类:
```
@DubboService
public class NctFileUploadService implements NctFileUploadRpc {
@Override
public NctFileUploadDto upload1(NctFileUploadParam nctFileUploadParam) {
ByteString byteString = nctFileUploadParam.getStream();
byte[] bytes = byteString.toByteArray();
ByteArrayInputStream byteArrayInputStream = new
ByteArrayInputStream(bytes);
MkFileUtil.writeFromStream(byteArrayInputStream, "c:/a.jpg");
return NctFileUploadDto.newBuilder().build();
}
@Override
public CompletableFuture<NctFileUploadDto>
upload1Async(NctFileUploadParam request) {
return NctFileUploadRpc.super.upload1Async(request);
}
@Override
public void upload1(NctFileUploadParam request,
StreamObserver<NctFileUploadDto> responseObserver) {
NctFileUploadRpc.super.upload1(request, responseObserver);
}
@Override
public StreamObserver<NctFileUploadParam>
upload(StreamObserver<NctFileUploadDto> responseObserver) {
return new StreamObserver<NctFileUploadParam>() {
@Override
public void onNext(NctFileUploadParam nctFileUploadParam) {
ByteString byteString = nctFileUploadParam.getStream();
byte[] bytes = byteString.toByteArray();
ByteArrayInputStream byteArrayInputStream = new
ByteArrayInputStream(bytes);
MkFileUtil.writeFromStream(byteArrayInputStream, "c:/a.jpg");
}
@Override
public void onError(Throwable t) {
MkLogUtil.error(t);
}
@Override
public void onCompleted() {
responseObserver.onNext(NctFileUploadDto.newBuilder()
.setFilePath("test")
.build());
responseObserver.onCompleted();
}
};
}
}
```
下面说一下我的问题。
如果调用upload的话需要构建StreamObserver对象,对调用方特别不友好。
如果调用upload1的话通过NctFileUploadParam传参即可,但是不确定有没有性能问题。
请指教。
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]