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的健康檢查。
主要功能包括,服務提供方,服務消費者
作為消費者
基本功能
- 支持Autowire Stub(BlockingStub, FutureStub, Stub)三種。
@Component public UserIdentifier { @Autowired private UserServiceGrpc.UserStub stub; }
- 自動連接Channel
在application.properties
或application.yaml
中配置grpc.consumers.service.[SERVICE_NAME]=grpc://localhost:8080
即可。
grpc.consumers.service.user.UserService=grpc://localhost:8080
高級功能
在application.properties
或application.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,可以添加諸如服務發現
, 服務降級
, 負載均衡
, 鏈路跟蹤
等等功能。
后續會提供示例程序供大家參考。
作為提供方
基本功能
- 自動綁定服務並暴露。
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端口
高級功能
- 服務分組
可以同時定義多個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
- 服務監聽定制
如果定義了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
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。