gRPC server với Spring Boot sử dụng grpc-server-spring-boot-starter

Hiện chưa có một official starter hỗ trợ cho gRPC trong Spring Boot nhưng các bạn cũng có thể sử dụng các starter do cộng đồng phát triển ở GitHub repository https://github.com/grpc-ecosystem/grpc-spring. Trong bài viết này, mình sẽ hướng dẫn các bạn cách xây dựng một gRPC server với Spring Boot sử dụng grpc-server-spring-boot-starter trong GitHub repository này các bạn nhé!

Đầu tiên, mình sẽ tạo mới một Spring Boot project để làm ví dụ:

Chúng ta sẽ khai báo grpc-server-spring-boot-starter như sau:

Ở đây, mình sẽ sử dụng Protocol Buffers Maven Plugin để generate Java code cho service contract của gRPC nên như các bạn thấy, mình cũng khai báo luôn dependency javax.annotation-api để khỏi bị lỗi compile sau khi generate source code.

Tập tin .proto trong thư mục src/main/proto định nghĩa service contract, mình sẽ định nghĩa đơn giản như sau:

Protocol Buffers Maven Plugin mình khai báo như sau:

Các bạn có thể đọc thêm bài viết Generate Java code cho service contract trong gRPC sử dụng Protocol Buffers Maven Plugin để hiểu rõ về cách sử dụng Protocol Buffers Maven Plugin để generate Java code cho service contract các bạn nhé!

Chạy Maven Compile, các bạn sẽ thấy kết quả như sau:

Để hiện thực HelloService với grpc-server-spring-boot-starter, các bạn chỉ cần thêm một class mới extends class HelloServiceGrpc.HelloServiceImplBase và annotate class này với annotation @GrpcService như sau:

Nội dung implement của phương thức hello() mình làm tương tự như trong bài viết trước đó các bạn!

grpc-server-spring-boot-starter với cơ chế auto-configuration của Spring Boot, sẽ tự động start một gRPC server với các default configuration, thêm implementation của HelloService để expose ra bên ngoài.

Mặc định thì grpc-server-spring-boot-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 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:

Rất nhanh và đơn giản phải không các bạn?

Add Comment