Перейти к содержанию

gRPC server

Kora предоставляет модуль для поднятия gRPC сервера на основе базового функционала io.grpc

Для подключения gRPC сервера, необходимо добавить модуль GrpcModule из следующей зависимости

implementation "ru.tinkoff.kora:grpc"

gRPC Service

Сгенерированные gRPC сервисы требуется пометить аннотацией @Component

@Component
public class ExampleService extends ExampleGrpc.ExampleImplBase {}

Default Interceptors

При запуске сервера по-умолчанию используются следующие перехватчики:

  • ContextServerInterceptor
  • CoroutineContextInjectInterceptor
  • MetricCollectorServerInterceptor
  • LoggingServerInterceptor

Для переопределения дефолтного списка перехватчиков можно переопределить метод serverBuilder из класса GrpcModule

Custom interceptor

Для добавления своего перехватчика достаточно создать наследника ServerInterceptor с аннотацией @Component

import ru.tinkoff.kora.common.Component;

@Component
public class GrpcExceptionHandlerServerInterceptor implements ServerInterceptor {

    @Override
    public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(ServerCall<ReqT, RespT> serverCall, Metadata metadata,
                                                                 ServerCallHandler<ReqT, RespT> serverCallHandler) {

        ServerCall.Listener<ReqT> listener = serverCallHandler.startCall(serverCall, metadata);
        return new ExceptionHandlingServerCallListener<>(listener, serverCall, metadata);
    }
}

Configuration

В настоящий момент для конфигурации gRPC server существует класс GrpcServerConfig, который принимает только номер порта (значение по умолчанию 8090)

Пример использования в application.conf:

grpcServer {
    port = 9090
}