Mình đã hướng dẫn các bạn cách xây dựng một gRPC server sử dụng một unofficial Spring Boot starter ở đây. Hiện tại thì Spring Boot đã có một official starter rồi nên các bạn có thể sử dụng nó để làm việc với gRPC. Để xây dựng một gRPC Server với Spring Boot gRPC Starter, chúng ta sẽ làm như thế nào? Hãy cùng nhau tìm hiểu trong bài viết này các bạn nhé!
Mình sẽ tạo mới Spring Boot project với Spring gRPC Starter dependency như sau:
Khi các bạn tạo mới Spring Boot project sử dụng Spring Initializr, nếu các bạn kiểm tra tập tin pom.xml, các bạn sẽ thấy, Ascopes Protocol Buffers Maven Plugin cũng được include để generate Java code từ tập tin .proto.
Để làm ví dụ cho bài viết này, mình cũng sẽ định nghĩa một service đơn giản như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
syntax = "proto3"; option java_multiple_files = true; package com.huongdanjava.springboot.grpc; message HelloRequest { string name = 1; } message HelloResponse { string message = 1; } service HelloService { rpc hello(HelloRequest) returns (HelloResponse); } |
Các bạn có thể lưu tập tin .proto này ở thư mục /src/main/proto rồi chạy command “mvn clean package” để generate Java classes nhé!
Để hiện thực HelloService, các bạn cũng chỉ cần thêm một class mới extends class HelloServiceGrpc.HelloServiceImplBase và annotate class này với annotation @Service là được:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
package com.huongdanjava.springboot.grpc; import io.grpc.stub.StreamObserver; import org.springframework.stereotype.Service; @Service public class HelloController extends HelloServiceGrpc.HelloServiceImplBase { @Override public void hello(HelloRequest request, StreamObserver<HelloResponse> responseObserver) { String greeting = "Hello " + request.getName() + " from Huong Dan Java"; HelloResponse response = HelloResponse.newBuilder() .setMessage(greeting) .build(); responseObserver.onNext(response); responseObserver.onCompleted(); } } |
Mặc định thì Spring gRPC Starter sẽ chạy gRPC server ở port 9090, các bạn có thể thay đổi port mặc định này bằng cách khai báo property spring.grpc.server.port với giá trị mà các bạn muốn nhé! Trong ví dụ này, mình sẽ để port mặc định.
Nếu giờ mình chạy ứng dụng ví dụ này rồi sử dụng Postman để request tới operation /hello, mình sẽ thấy kết quả như sau:
Như vậy là chúng ta đã xây dựng thành công gRPC server sử dụng Spring gRPC Starter rồi đó các bạn!