集成Spring-Boot與gRPC,grpc-spring-boot-starter


項目地址:grpc-spring-boot-starter

grpc是一個出身名門的RPC框架,性能高,靈活度高,支持多語言。
支持多語言,如果你的項目在使用多種語言做開發,非常推薦使用。

作為Java的扛把子,Spring沒有提供官方的spring-boot-starter-grpc,所以出現了很多了grpc-spring-boot-starter。

我也提供了一個快速上手,高度可定制化的grpc-spring-boot-starter供大家參考使用。

grpc-spring-boot-starter

該項目是java-grpc結合springboot、springcloud使用的一個開源項目,可以結合springboot項目單獨使用,也可以結合springcloud項目在微服務架構下使用。該項目具有如下特點或特性:

  • 基於springboot自動配置,實現起步依賴,只需要簡單的配置和相應的注解,就可以啟動gRPC Server。
  • 支持在Spring Cloud項目中使用,支持主流的Spring Cloud eureka、springcloud consul的服務注冊發現組件。
  • 支持分布式鏈路跟蹤,結合springcloud sleuth,可以展示服務調用鏈。
  • 支持對gRPC Server的健康檢查。

主要功能包括,服務提供方服務消費者

作為消費者

基本功能
  1. 支持Autowire Stub(BlockingStub, FutureStub, Stub)三種。
@Component public UserIdentifier { @Autowired private UserServiceGrpc.UserStub stub; } 
  1. 自動連接Channel
    application.propertiesapplication.yaml中配置grpc.consumers.service.[SERVICE_NAME]=grpc://localhost:8080即可。
grpc.consumers.service.user.UserService=grpc://localhost:8080
高級功能

application.propertiesapplication.yaml中配置grpc.consumers.service.[SERVICE_NAME]=xxxx即可。
其中xxxx為Spring Bean的name,必須實現wenmingwei.consumers.Customizer接口

package wenmingwei.consumers; import io.grpc.Channel; public interface Customizer { Channel customize(); } 

可以用於自定義Channel,可以添加諸如服務發現, 服務降級, 負載均衡, 鏈路跟蹤等等功能。
后續會提供示例程序供大家參考。

作為提供方

基本功能
  1. 自動綁定服務並暴露。

grpc服務的實現,加上注解@Component即可

@Component public class UserServiceImpl extends UserServiceGrpc.UserServiceImplBase { //省略... } 

2.【可選】 默認服務器設置。

grpc.providers.host=192.168.0.1
grpc.providers.port=9999
grpc.providers.name=default-grpc-server

不設置的話,則默認監聽8080端口

高級功能
  1. 服務分組

可以同時定義多個grpc服務監聽,用於內部分組。
每個服務監聽用於監聽不同的grpc服務。配置如下:

# user服務的監聽
grpc.providers.host.0=192.168.0.1
grpc.providers.port.0=8080
grpc.providers.name.0=user-grpc-server
grpc.providers.services.0=user.UserService

# admin服務的監聽
grpc.providers.host.1=192.168.0.1
grpc.providers.port.1=8081
grpc.providers.name.1=admin-grpc-server
grpc.providers.services.1=admin.AdminService
  1. 服務監聽定制

如果定義了grpc.providers.Y.customizer=xxxx,啟動Y為服務監聽序號,不設置則默認0。
其中xxxx為Spring Bean的name,必須實現wenmingwei.providers.Customizer接口

package wenmingwei.providers; import io.grpc.ServerBuilder; public interface Customizer<T extends ServerBuilder<T>> { void customize(ServerBuilder<T> serverBuilder); } 

可以用於自定義io.grpc.Server,可以添加諸如服務注冊, 服務擋板, 鏈路跟蹤等等功能。
后續會提供示例程序供大家參考。

歡迎大家提意見,后續進行改進。



作者:onmeiei
鏈接:https://www.jianshu.com/p/469e3603d689
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM