GRPC StatusRuntimeException: CANCELED: отменено в службе двунаправленной потоковой передачи

Я создаю приложение 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")
    }
})

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

Вы отправляли какое-нибудь сообщение с clientToServerRequest? Тайм-аут сервера истек?

user675693 14.09.2018 00:18

@ user675693 Я могу отправить сообщение на сервер, и я получаю на него ответ, но через миллисекунды я получаю StatusRuntimeException: CANCELED: Cancelled

user3626048 14.09.2018 00:57
0
2
1 466
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Cancelled
Rst Stream

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

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

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

Ответ принят как подходящий

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

В чем была проблема ?

Tausif mohammad 13.01.2020 05:38

@Tausifmohammad не знаю, бэкэнд-разработчики исправили это

user3626048 13.01.2020 12:45

Другие вопросы по теме