null

Нативная поддержка gRPC в Spring

Не так давно в релиз был выкачена первая мажорная версия библиотеки Spring gRPC - для встроенной поддержки gRPC-сервисов в приложении Spring Boot. Она развивается внутри экосистемы Spring, а значит версионирование и интеграция с Boot - это теперь не вызывает проблем. У меня появился интерес протестить это in action.

​​​​Начнем с того, что подключим необходимые зависимости в build.gradle.kts:

implementation("org.springframework.grpc:spring-grpc-spring-boot-starter")
implementation("com.google.protobuf:protobuf-java")

Допустим, у нас есть такой proto-файл:
​​​​​

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

Реализация сервиса на kotlin будет выглядить следующим образом:
 

@GrpcService 
class GreeterService : GreeterGrpc.GreeterImplBase() {

    override fun sayHello(
        request: HelloRequest,
        responseObserver: StreamObserver<HelloReply>
    ) {
        val reply = HelloReply.newBuilder()
            .setMessage("Hello, ${request.name}!")
            .build()

        responseObserver.onNext(reply)
        responseObserver.onCompleted()
    }
}
​​​​​​​// можно использовать и аннотацию @Service, но на личный вкус @GrpcService выглядит нагляднее

Spring gRPC автоматически обнаружит все бины, которые реализуют BindableService (это интерфейс, от которого наследует ImplBase), и зарегистрирует их на gRPC-сервере.
​​​​

Дело за малым - осталось всё собрать и протестировать. Делать я это буду с помощью cli тулзы grpcurl, которая как раз предназначена для протыкивания grpc сервисов.


Подводя итог, можно сказать, что Spring gRPC успешно решает главную задачу - делает интеграцию gRPC в Spring Boot максимально бесшовной и нативной. Как показал тест, весь процесс настройки сводится к подключению стартера и созданию класса с аннотацией @Service. Автоматическое обнаружение сервисов и привычная работа через DI позволяют сосредоточиться на бизнес-логике, не отвлекаясь на инфраструктурные сложности. 

​​​​​​​​​​​​​​

Вперед

Коротко о себе:

Работаю кем-то в компании Tune-it. На работе занимаюсь какими-то проектами, связанными с чем-то.

Ничего не найдено. n is 0