Caros usuários do gRPC/Spring, a fim de aprimorar a experiência do usuário do grpc-ecosystem/grpc-spring, desenvolvemos esta pesquisa como um meio de estabelecer uma linha direta de comunicação. Seu feedback é muito apreciado.
LEIA-ME: Inglês | 中文
Documentação: Inglês | 中文
Configura e executa automaticamente o servidor gRPC com suas implementações @GrpcService
Cria e gerencia automaticamente seus canais e stubs grpc com @GrpcClient
Suporta outros sabores grpc-java (por exemplo, gRPC reativo (RxJava), grpc-kotlin, ...)
io.grpc.BindableService
)StubFactory
s personalizadosSuporta Spring-Security
Suporta Spring Cloud
DiscoveryClient
do Spring (todos os tipos) Suporta Spring Sleuth como solução de rastreamento distribuído
(Se corajoso-instrumentação-grpc estiver presente)
Suporta interceptores de servidor/cliente gRPC globais e personalizados
Suporte métrico automático (baseado em micrômetro/atuador)
Também funciona com grpc-netty (não sombreado)
A versão mais recente é 3.1.0.RELEASE
foi compilada com spring-boot 3.2.4
e spring-cloud 2023.0.0
, mas também é compatível com uma grande variedade de outras versões. Uma visão geral de todas as versões e suas respectivas versões de biblioteca pode ser encontrada em nossa documentação.
Nota: Este projeto também pode ser usado sem Spring-Boot, porém isso requer alguma configuração manual do bean.
Para adicionar uma dependência usando Maven, use o seguinte:
< dependency >
< groupId >net.devh</ groupId >
< artifactId >grpc-spring-boot-starter</ artifactId >
< version >3.1.0.RELEASE</ version >
</ dependency >
Para adicionar uma dependência usando Gradle:
dependencies {
implementation ' net.devh:grpc-spring-boot-starter:3.1.0.RELEASE '
}
Para adicionar uma dependência usando Maven, use o seguinte:
< dependency >
< groupId >net.devh</ groupId >
< artifactId >grpc-server-spring-boot-starter</ artifactId >
< version >3.1.0.RELEASE</ version >
</ dependency >
Para adicionar uma dependência usando Gradle:
dependencies {
implementation ' net.devh:grpc-server-spring-boot-starter:3.1.0.RELEASE '
}
Anote suas implementações de interface de servidor com @GrpcService
@ GrpcService
public class GrpcServerService extends GreeterGrpc . GreeterImplBase {
@ Override
public void sayHello ( HelloRequest req , StreamObserver < HelloReply > responseObserver ) {
HelloReply reply = HelloReply . newBuilder (). setMessage ( "Hello ==> " + req . getName ()). build ();
responseObserver . onNext ( reply );
responseObserver . onCompleted ();
}
}
Por padrão, o servidor grpc escutará a porta 9090
. Estas e outras configurações podem ser alteradas através do mecanismo de propriedades do Spring. O servidor usa o grpc.server.
prefixo.
Consulte nossa documentação para obter mais detalhes.
Para adicionar uma dependência usando Maven, use o seguinte:
< dependency >
< groupId >net.devh</ groupId >
< artifactId >grpc-client-spring-boot-starter</ artifactId >
< version >3.1.0.RELEASE</ version >
</ dependency >
Para adicionar uma dependência usando Gradle:
dependencies {
compile ' net.devh:grpc-client-spring-boot-starter:3.1.0.RELEASE '
}
Anote um campo do stub do seu cliente grpc com @GrpcClient(serverName)
Não use em conjunto com @Autowired
ou @Inject
@ GrpcClient ( "gRPC server name" )
private GreeterGrpc . GreeterBlockingStub greeterStub ;
Nota: Você pode usar o mesmo nome de servidor grpc para múltiplos canais e também stubs diferentes (mesmo com interceptores diferentes).
Então você pode enviar consultas ao seu servidor assim:
HelloReply response = stub . sayHello ( HelloRequest . newBuilder (). setName ( name ). build ());
É possível configurar o endereço de destino para cada cliente individualmente. No entanto, em alguns casos, você pode confiar apenas na configuração padrão. Você pode personalizar o mapeamento de URL padrão por meio dos beans NameResolver.Factory
. Se você não configurar esse bean, o uri padrão será adivinhado usando o esquema padrão e o nome (por exemplo: dns:/<name>
):
Estas e outras configurações podem ser alteradas através do mecanismo de propriedades do Spring. Os clientes usam grpc.client.(serverName).
prefixo.
Consulte nossa documentação para obter mais detalhes.
Esta biblioteca oferece suporte grpc-netty
e grpc-netty-shaded
. O último pode evitar conflitos com versões grpc incompatíveis ou conflitos entre bibliotecas que requerem versões diferentes do netty.
Nota: Se o netty sombreado estiver presente no caminho de classe, então esta biblioteca sempre o favorecerá em relação ao grpc-netty não sombreado.
Você pode usá-lo com o Maven assim:
< dependency >
< groupId >io.grpc</ groupId >
< artifactId >grpc-netty</ artifactId >
< version >${grpcVersion}</ version >
</ dependency >
<!-- For both -->
< dependency >
< groupId >net.devh</ groupId >
< artifactId >grpc-spring-boot-starter</ artifactId >
< version >...</ version >
< exclusions >
< exclusion >
< groupId >io.grpc</ groupId >
< artifactId >grpc-netty-shaded</ artifactId >
</ exclusion >
</ exclusions >
</ dependency >
<!-- For the server (only) -->
< dependency >
< groupId >net.devh</ groupId >
< artifactId >grpc-server-spring-boot-starter</ artifactId >
< version >...</ version >
< exclusions >
< exclusion >
< groupId >io.grpc</ groupId >
< artifactId >grpc-netty-shaded</ artifactId >
</ exclusion >
</ exclusions >
</ dependency >
<!-- For the client (only) -->
< dependency >
< groupId >net.devh</ groupId >
< artifactId >grpc-client-spring-boot-starter</ artifactId >
< version >...</ version >
< exclusions >
< exclusion >
< groupId >io.grpc</ groupId >
< artifactId >grpc-netty-shaded</ artifactId >
</ exclusion >
</ exclusions >
</ dependency >
e assim ao usar o Gradle:
implementation " io.grpc:grpc-netty: ${ grpcVersion } "
implementation ' net.devh:grpc-spring-boot-starter:... ' exclude group : ' io.grpc ' , module : ' grpc-netty-shaded ' // For both
implementation ' net.devh:grpc-client-spring-boot-starter:... ' exclude group : ' io.grpc ' , module : ' grpc-netty-shaded ' // For the client (only)
implementation ' net.devh:grpc-server-spring-boot-starter:... ' exclude group : ' io.grpc ' , module : ' grpc-netty-shaded ' // For the server (only)
Leia mais sobre nossos projetos de exemplo aqui.
Consulte nossa documentação para obter ajuda.
Contribuições são sempre bem-vindas! Consulte CONTRIBUTING.md para obter diretrizes detalhadas.