集成Spring-Boot与gRPC,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的健康检查。
主要功能包括,服务提供方,服务消费者
作为消费者
基本功能
- 支持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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
集成Spring-Boot与gRPC,grpc-spring-boot-starter的更多相关文章
- (转)Spring Boot 2 (八):Spring Boot 集成 Memcached
http://www.ityouknow.com/springboot/2018/09/01/spring-boot-memcached.html Memcached 介绍 Memcached 是一个 ...
- Spring Boot 2 (八):Spring Boot 集成 Memcached
Spring Boot 2 (八):Spring Boot 集成 Memcached 一.Memcached 介绍 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数 ...
- 81. Spring Boot集成JSP疑问【从零开始学Spring Boot】
[原创文章,转载请注明出处] 针对文章: ()Spring Boot 添加JSP支持[从零开始学Spring Boot] 有网友提了这么一些疑问: 1.Spring Boot使用jsp时,仍旧可以打成 ...
- 一起来学spring Cloud | 第一章:spring Cloud 与Spring Boot
目前大家都在说微服务,其实微服务不是一个名字,是一个架构的概念,大家现在使用的基于RPC框架(dubbo.thrift等)架构其实也能算作一种微服务架构. 目前越来越多的公司开始使用微服务架构,所以在 ...
- Spring Boot (五)Spring Data JPA 操作 MySQL 8
一.Spring Data JPA 介绍 JPA(Java Persistence API)Java持久化API,是 Java 持久化的标准规范,Hibernate是持久化规范的技术实现,而Sprin ...
- (转)Spring Boot 2 (十):Spring Boot 中的响应式编程和 WebFlux 入门
http://www.ityouknow.com/springboot/2019/02/12/spring-boot-webflux.html Spring 5.0 中发布了重量级组件 Webflux ...
- Spring Boot 2 (十):Spring Boot 中的响应式编程和 WebFlux 入门
Spring 5.0 中发布了重量级组件 Webflux,拉起了响应式编程的规模使用序幕. WebFlux 使用的场景是异步非阻塞的,使用 Webflux 作为系统解决方案,在大多数场景下可以提高系统 ...
- Spring Boot 2(一):Spring Boot 2.0新特性
Spring Boot 2(一):Spring Boot 2.0新特性 Spring Boot依赖于Spring,而Spring Cloud又依赖于Spring Boot,因此Spring Boot2 ...
- Spring Boot(十四):spring boot整合shiro-登录认证和权限管理
Spring Boot(十四):spring boot整合shiro-登录认证和权限管理 使用Spring Boot集成Apache Shiro.安全应该是互联网公司的一道生命线,几乎任何的公司都会涉 ...
- Spring Boot(十二):spring boot如何测试打包部署
Spring Boot(十二):spring boot如何测试打包部署 一.开发阶段 1,单元测试 在开发阶段的时候最重要的是单元测试了,springboot对单元测试的支持已经很完善了. (1)在p ...
随机推荐
- JZOJ.2117. 【2016-12-30普及组模拟】台风
题目大意: 天气预报频道每天从卫星上接受卫星云图.图片被看作是一个矩阵,每个位置上要么是”#”,要么”.”,”#”表示该位置没有云,”.”表示有云,地图上每个位置有多达8个相邻位置,分别是,左上.上. ...
- Lucene BooleanQuery相关算法
BooleanQuery对两种不同查询场景执行不同的算法: 场景1: 所有的子句都必须满足,而且所有的子句里没有嵌套BooleanQuery. 例: a AND b AND c 上面语句表示要同时包含 ...
- vue3.0和2.0的区别,Vue-cli3.0于 8月11日正式发布,更快、更小、更易维护、更易于原生、让开发者更轻松
vue3.0和2.0的区别Vue-cli3.0于 8月11日正式发布,看了下评论,兼容性不是很好,命令有不少变化,不是特别的乐观vue3.0 的发布与 vue2.0 相比,优势主要体现在:更快.更小. ...
- web文件上传的总结(二)改变Apache默认post值来提高文件上传大小
上传的文件大小大于2MB的解决方法 #默认apache 允许上大小2MB #技术经理-->修改apache默认配置 php.ini (授权) (1)复制 php.ini -> php1. ...
- Linux中断管理 (1)Linux中断管理机制【转】
转自:https://www.cnblogs.com/arnoldlu/p/8659981.html 目录: <Linux中断管理> <Linux中断管理 (1)Linux中断管理机 ...
- 03导航链接的制作(wx:for循环)和小程序警告request fail url not in domain list
06==>导航链接的制作 <!-- 导航链接 --> <navigator url="../list/list" hover-class="nav ...
- Python类的使用总结
Python是一个面向对象的解释型语言,所以当然也有类的概念.在Python中,所有数据类型都可以视为对象,当然也可以自定义对象.自定义的对象数据类型就是面向对象中的类(Class)的概念.之前接触类 ...
- 老男孩LINUX--打包压缩、查看、解压
tar就是打包的意思,打包就是将多个文件或者目录放置到一起,整体的大小没有变化,tar可以调用一些压缩的软件,比如zip,在打包的同时进行压缩.先来上一个例子: tar zcvf /tmp/etc.t ...
- 20180706模拟赛T3——神经衰弱
文件名: card 题目类型: 传统题 时间限制: 1秒 内存限制: 128MB 编译优化: 无 题目描述 天然少女小雪非常喜欢玩一个叫做神经衰弱的游戏. 游戏规则是,有若干种牌,每种牌有若干对,开始 ...
- python27期day13:闭包、装饰器初始、标准版装饰器、作业题
1.闭包: 保护数据安全.保护数据干净性. 2.闭包的定义:在嵌套函数内.使用非全局变量(且不使用本层变量) 将嵌套函数返回 闭包的目的:要接受被装饰的函数和被装饰函数需要的参数3.闭包举例子: de ...