Как я могу передать подробное сообщение об исключении в responseObserver.onError () gRPC - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь передать подробное сообщение, описывающее исключение, с помощью gRPC.Я узнал, что должен использовать responseObserver.onError для его передачи, и gRPC предлагает метаданные, чтобы сделать это, но я до сих пор не знаю, где его разместить, потому что я не могу создать метаданные, все конструктор метаданных неpublic.

static class GrpcTestService extends GrpcTestGrpc.GrpcTestImplBase {

        @Override
        public void sayHello(HelloRequest req, StreamObserver<HelloResponse> responseObserver) {
            try {
                HelloResponse reply = HelloResponse.newBuilder().setMessage("got it ! " + req.getName()).build();
                throw new RuntimeException("I'm an exception!!!");
//                responseObserver.onNext(reply);
//                responseObserver.onCompleted();
            } catch (Exception e) {
                responseObserver.onError(new StatusRuntimeException(Status.ABORTED, new Metadata("metadata exception".getBytes())));
            }
        }
    }

Как и выше, я не могу создать метаданные с помощью 'новых метаданных ("xxxx") ", так как я могу обернуть свое специальное сообщение в responseObserver.onError?

1 Ответ

0 голосов
/ 10 октября 2018

Чтобы отправить подробное сообщение, прикрепите его к Status с withDescription:

Status.ABORTED.withDescription("The detailed reason")

Описание полезно для разработчиков при отладке системы.Он не предназначен для потребления машиной.

Конструктор для Metadata является открытым, но не имеет аргументов.Вы создаете его с помощью new Metadata(), а затем можете изменять его с помощью таких вещей, как put(Key<T> key, T value).Метаданные полезны для отправки машинно-понятных сведений об ошибках.

...