Chers utilisateurs de gRPC/Spring, afin d'améliorer l'expérience utilisateur de grpc-ecosystem/grpc-spring, nous avons développé cette enquête comme moyen d'établir une ligne de communication directe. Vos commentaires sont très appréciés.
README : anglais | Chine
Documentation : anglais | Chine
Configure et exécute automatiquement le serveur gRPC avec vos implémentations @GrpcService
Crée et gère automatiquement vos canaux et stubs grpc avec @GrpcClient
Prend en charge d'autres versions de grpc-java (par exemple Reactive gRPC (RxJava), grpc-kotlin, ...)
io.grpc.BindableService
)StubFactory
personnalisésPrend en charge la sécurité Spring
Prend en charge le nuage de printemps
DiscoveryClient
de Spring (toutes les versions) Prend en charge Spring Sleuth en tant que solution de traçage distribuée
(Si brave-instrumentation-grpc est présent)
Prend en charge les intercepteurs serveur/client gRPC globaux et personnalisés
Prise en charge métrique automatique (basée sur un micromètre/actionneur)
Fonctionne également avec grpc-netty (non ombré)
La dernière version est 3.1.0.RELEASE
elle a été compilée avec spring-boot 3.2.4
et spring-cloud 2023.0.0
mais elle est également compatible avec une grande variété d'autres versions. Un aperçu de toutes les versions et de leurs versions de bibliothèque respectives peut être trouvé dans notre documentation.
Remarque : ce projet peut également être utilisé sans Spring-Boot, mais cela nécessite une configuration manuelle du bean.
Pour ajouter une dépendance à l'aide de Maven, utilisez ce qui suit :
< dependency >
< groupId >net.devh</ groupId >
< artifactId >grpc-spring-boot-starter</ artifactId >
< version >3.1.0.RELEASE</ version >
</ dependency >
Pour ajouter une dépendance à l'aide de Gradle :
dependencies {
implementation ' net.devh:grpc-spring-boot-starter:3.1.0.RELEASE '
}
Pour ajouter une dépendance à l'aide de Maven, utilisez ce qui suit :
< dependency >
< groupId >net.devh</ groupId >
< artifactId >grpc-server-spring-boot-starter</ artifactId >
< version >3.1.0.RELEASE</ version >
</ dependency >
Pour ajouter une dépendance à l'aide de Gradle :
dependencies {
implementation ' net.devh:grpc-server-spring-boot-starter:3.1.0.RELEASE '
}
Annotez vos implémentations d'interface serveur avec @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 ();
}
}
Par défaut, le serveur grpc écoutera le port 9090
. Ces paramètres et d'autres peuvent être modifiés via le mécanisme de propriétés de Spring. Le serveur utilise le grpc.server.
préfixe.
Reportez-vous à notre documentation pour plus de détails.
Pour ajouter une dépendance à l'aide de Maven, utilisez ce qui suit :
< dependency >
< groupId >net.devh</ groupId >
< artifactId >grpc-client-spring-boot-starter</ artifactId >
< version >3.1.0.RELEASE</ version >
</ dependency >
Pour ajouter une dépendance à l'aide de Gradle :
dependencies {
compile ' net.devh:grpc-client-spring-boot-starter:3.1.0.RELEASE '
}
Annotez un champ de votre stub client grpc avec @GrpcClient(serverName)
Ne pas utiliser avec @Autowired
ou @Inject
@ GrpcClient ( "gRPC server name" )
private GreeterGrpc . GreeterBlockingStub greeterStub ;
Remarque : Vous pouvez utiliser le même nom de serveur grpc pour plusieurs canaux ainsi que différents stubs (même avec des intercepteurs différents).
Ensuite, vous pouvez envoyer des requêtes à votre serveur comme ceci :
HelloReply response = stub . sayHello ( HelloRequest . newBuilder (). setName ( name ). build ());
Il est possible de configurer l'adresse cible pour chaque client individuellement. Cependant, dans certains cas, vous pouvez simplement vous fier à la configuration par défaut. Vous pouvez personnaliser le mappage d'URL par défaut via les beans NameResolver.Factory
. Si vous ne configurez pas ce bean, alors l'URI par défaut sera deviné en utilisant le schéma par défaut et le nom (par exemple : dns:/<name>
) :
Ces paramètres et d'autres peuvent être modifiés via le mécanisme de propriétés de Spring. Les clients utilisent grpc.client.(serverName).
préfixe.
Reportez-vous à notre documentation pour plus de détails.
Cette bibliothèque prend en charge à la fois grpc-netty
et grpc-netty-shaded
. Cette dernière solution pourrait éviter les conflits avec des versions grpc incompatibles ou les conflits entre bibliothèques nécessitant différentes versions de netty.
Remarque : si le netty ombré est présent sur le chemin de classe, alors cette bibliothèque le privilégiera toujours par rapport à celui non ombré grpc-netty.
Vous pouvez l'utiliser avec Maven comme ceci :
< 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 >
et comme ceci lorsque vous utilisez 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)
En savoir plus sur nos exemples de projets ici.
Reportez-vous à notre documentation pour obtenir de l'aide.
Les contributions sont toujours les bienvenues ! Veuillez consulter CONTRIBUTING.md pour des directives détaillées.