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]

Reply via email to