เรียนผู้ใช้ gRPC/Spring เพื่อที่จะปรับปรุงประสบการณ์ผู้ใช้ของระบบนิเวศ grpc/grpc-spring เราได้พัฒนาแบบสำรวจนี้เพื่อสร้างช่องทางการสื่อสารโดยตรง ความคิดเห็นของคุณได้รับการชื่นชมอย่างมาก
README: อังกฤษ | 中文
เอกสารประกอบ: อังกฤษ | 中文
กำหนดค่าและรันเซิร์ฟเวอร์ gRPC โดยอัตโนมัติด้วยการใช้งาน @GrpcService
ของคุณ
สร้างและจัดการช่อง grpc และ stub ของคุณโดยอัตโนมัติด้วย @GrpcClient
รองรับรสชาติ grpc-java อื่น ๆ (เช่น Reactive gRPC (RxJava), grpc-kotlin, ... )
io.grpc.BindableService
)StubFactory
แบบกำหนดเองรองรับ Spring-Security
รองรับสปริงคลาวด์
DiscoveryClient
ของสปริง (ทุกรสชาติ) รองรับ Spring Sleuth เป็นโซลูชันการติดตามแบบกระจาย
(หากมี Brave-instrumentation-grpc อยู่)
รองรับเซิร์ฟเวอร์/ไคลเอนต์ gRPC ระดับโลกและแบบกำหนดเอง
รองรับหน่วยเมตริกอัตโนมัติ (ใช้ไมโครมิเตอร์/แอคชูเอเตอร์)
ใช้งานได้กับ grpc-netty (ไม่แรเงา) ด้วย
เวอร์ชันล่าสุดคือ 3.1.0.RELEASE
ซึ่งคอมไพล์ด้วย spring-boot 3.2.4
และ spring-cloud 2023.0.0
แต่ยังเข้ากันได้กับเวอร์ชันอื่นๆ มากมายอีกด้วย คุณสามารถดูภาพรวมของทุกเวอร์ชันและเวอร์ชันไลบรารีที่เกี่ยวข้องได้ในเอกสารประกอบของเรา
หมายเหตุ: โปรเจ็กต์นี้ยังสามารถใช้ได้โดยไม่ต้องใช้ Spring-Boot อย่างไรก็ตาม ต้องมีการกำหนดค่า bean ด้วยตนเอง
หากต้องการเพิ่มการพึ่งพาโดยใช้ Maven ให้ใช้ดังต่อไปนี้:
< dependency >
< groupId >net.devh</ groupId >
< artifactId >grpc-spring-boot-starter</ artifactId >
< version >3.1.0.RELEASE</ version >
</ dependency >
วิธีเพิ่มการพึ่งพาโดยใช้ Gradle:
dependencies {
implementation ' net.devh:grpc-spring-boot-starter:3.1.0.RELEASE '
}
หากต้องการเพิ่มการพึ่งพาโดยใช้ Maven ให้ใช้ดังต่อไปนี้:
< dependency >
< groupId >net.devh</ groupId >
< artifactId >grpc-server-spring-boot-starter</ artifactId >
< version >3.1.0.RELEASE</ version >
</ dependency >
วิธีเพิ่มการพึ่งพาโดยใช้ Gradle:
dependencies {
implementation ' net.devh:grpc-server-spring-boot-starter:3.1.0.RELEASE '
}
อธิบายการใช้งานอินเทอร์เฟซเซิร์ฟเวอร์ของคุณด้วย @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 ();
}
}
ตามค่าเริ่มต้น เซิร์ฟเวอร์ grpc จะฟังพอร์ต 9090
การตั้งค่าเหล่านี้และการตั้งค่าอื่น ๆ สามารถเปลี่ยนแปลงได้ผ่านกลไกคุณสมบัติของ Spring เซิร์ฟเวอร์ใช้ grpc.server.
คำนำหน้า
โปรดดูเอกสารประกอบของเราสำหรับรายละเอียดเพิ่มเติม
หากต้องการเพิ่มการพึ่งพาโดยใช้ Maven ให้ใช้ดังต่อไปนี้:
< dependency >
< groupId >net.devh</ groupId >
< artifactId >grpc-client-spring-boot-starter</ artifactId >
< version >3.1.0.RELEASE</ version >
</ dependency >
วิธีเพิ่มการพึ่งพาโดยใช้ Gradle:
dependencies {
compile ' net.devh:grpc-client-spring-boot-starter:3.1.0.RELEASE '
}
ใส่คำอธิบายประกอบฟิลด์ของต้นขั้วไคลเอ็นต์ grpc ของคุณด้วย @GrpcClient(serverName)
ห้ามใช้ร่วมกับ @Autowired
หรือ @Inject
@ GrpcClient ( "gRPC server name" )
private GreeterGrpc . GreeterBlockingStub greeterStub ;
หมายเหตุ: คุณสามารถใช้ชื่อเซิร์ฟเวอร์ grpc เดียวกันสำหรับหลายช่องสัญญาณและ stub ที่แตกต่างกันได้ (แม้ว่าจะมีตัวดักต่างกันก็ตาม)
จากนั้นคุณสามารถส่งข้อความค้นหาไปยังเซิร์ฟเวอร์ของคุณได้ดังนี้:
HelloReply response = stub . sayHello ( HelloRequest . newBuilder (). setName ( name ). build ());
สามารถกำหนดค่าที่อยู่เป้าหมายสำหรับลูกค้าแต่ละรายแยกกันได้ อย่างไรก็ตาม ในบางกรณี คุณสามารถพึ่งพาการกำหนดค่าเริ่มต้นได้ คุณสามารถปรับแต่งการแมป URL เริ่มต้นได้ผ่าน NameResolver.Factory
beans หากคุณไม่ได้กำหนดค่า bean นั้น ระบบจะเดา uri เริ่มต้นโดยใช้รูปแบบเริ่มต้นและชื่อ (เช่น: dns:/<name>
):
การตั้งค่าเหล่านี้และการตั้งค่าอื่น ๆ สามารถเปลี่ยนแปลงได้ผ่านกลไกคุณสมบัติของ Spring ไคลเอนต์ใช้ grpc.client.(serverName).
คำนำหน้า
โปรดดูเอกสารประกอบของเราสำหรับรายละเอียดเพิ่มเติม
ไลบรารีนี้รองรับทั้ง grpc-netty
และ grpc-netty-shaded
อันหลังอาจป้องกันข้อขัดแย้งกับ grpc-version ที่เข้ากันไม่ได้หรือข้อขัดแย้งระหว่างไลบรารีที่ต้องใช้ netty เวอร์ชันที่แตกต่างกัน
หมายเหตุ: หากมี netty ที่แรเงาอยู่บน classpath ไลบรารีนี้จะนิยมมันมากกว่า grpc-netty ที่ไม่แรเงาเสมอ
คุณสามารถใช้กับ Maven ได้ดังนี้:
< 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 >
และเช่นนี้เมื่อใช้ 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)
อ่านเพิ่มเติมเกี่ยวกับโครงการตัวอย่างของเราที่นี่
โปรดดูเอกสารของเราเพื่อขอความช่วยเหลือ
ยินดีต้อนรับผลงานเสมอ! โปรดดู CONTRIBUTING.md สำหรับคำแนะนำโดยละเอียด