gRPC StatusRuntimeException: CANCELED: отменено в службе двунаправленной потоковой передачи - PullRequest
0 голосов
/ 13 сентября 2018

Я создаю Android приложение, которое использует gRPC для связи с сервером. У меня мало способов обслуживания. Нет проблем со связью с использованием простого метода rpc, но у меня проблема с bidirectional streaming.

Я получаю одно сообщение ServerToClient и после этого получаю сообщение об ошибке: io.grpc.StatusRuntimeException: CANCELLED: Cancelled

Это мой сервис:

service CommunicationGateway {
    [...]
    rpc CommunicationChannel(stream ClientToServer) returns (stream ServerToClient) {}
}

Вот как я создаю ManagedChannel, используя OkHttp и заглушку:

this.channel = OkHttpChannelBuilder.forAddress(ip, port)
        .useTransportSecurity()
        .connectionSpec(ConnectionSpec.MODERN_TLS)
        .sslSocketFactory(buildSslContext().socketFactory)
        .keepAliveWithoutCalls(true)
        .build()
this.asyncStub = CommunicationGatewayGrpc.newStub(this.channel)

А вот мой код для начала потоковой передачи:

val clientToServerRequest = asyncStub.communicationChannel(object : StreamObserver<Messages.ServerToClient> {
    override fun onNext(value: Messages.ServerToClient) {
        info("communicationChannel onNext $value")
    }
    override fun onError(t: Throwable) {
        t.printStackTrace()
    }
    override fun onCompleted() {
        info("communicationChannel onCompleted")
    }
})

Это проблема с моим приложением (на стороне клиента) или на стороне сервера? Или как это проверить?

Ответы [ 2 ]

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

Как оказалось, это была проблема на стороне сервера

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

Описание статуса, которое вы описали, вероятно, неполное. Скорее всего, это должно было быть (да, с новой строкой):

Cancelled
Rst Stream

Предполагается, что он был сгенерирован на стороне клиента современной версией gRPC-Java с транспортом на основе OkHttp.

Если это так, то сервер / прокси отменил RPC. На стороне клиента больше не известно никакой информации.

Если вы используете прокси на стороне сервера, возможно, он прерывает поток по истечении времени ожидания. Проверьте конфигурацию вашего прокси.

...