项目地址: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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

集成Spring-Boot与gRPC,grpc-spring-boot-starter的更多相关文章

  1. (转)Spring Boot 2 (八):Spring Boot 集成 Memcached

    http://www.ityouknow.com/springboot/2018/09/01/spring-boot-memcached.html Memcached 介绍 Memcached 是一个 ...

  2. Spring Boot 2 (八):Spring Boot 集成 Memcached

    Spring Boot 2 (八):Spring Boot 集成 Memcached 一.Memcached 介绍 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数 ...

  3. 81. Spring Boot集成JSP疑问【从零开始学Spring Boot】

    [原创文章,转载请注明出处] 针对文章: ()Spring Boot 添加JSP支持[从零开始学Spring Boot] 有网友提了这么一些疑问: 1.Spring Boot使用jsp时,仍旧可以打成 ...

  4. 一起来学spring Cloud | 第一章:spring Cloud 与Spring Boot

    目前大家都在说微服务,其实微服务不是一个名字,是一个架构的概念,大家现在使用的基于RPC框架(dubbo.thrift等)架构其实也能算作一种微服务架构. 目前越来越多的公司开始使用微服务架构,所以在 ...

  5. Spring Boot (五)Spring Data JPA 操作 MySQL 8

    一.Spring Data JPA 介绍 JPA(Java Persistence API)Java持久化API,是 Java 持久化的标准规范,Hibernate是持久化规范的技术实现,而Sprin ...

  6. (转)Spring Boot 2 (十):Spring Boot 中的响应式编程和 WebFlux 入门

    http://www.ityouknow.com/springboot/2019/02/12/spring-boot-webflux.html Spring 5.0 中发布了重量级组件 Webflux ...

  7. Spring Boot 2 (十):Spring Boot 中的响应式编程和 WebFlux 入门

    Spring 5.0 中发布了重量级组件 Webflux,拉起了响应式编程的规模使用序幕. WebFlux 使用的场景是异步非阻塞的,使用 Webflux 作为系统解决方案,在大多数场景下可以提高系统 ...

  8. Spring Boot 2(一):Spring Boot 2.0新特性

    Spring Boot 2(一):Spring Boot 2.0新特性 Spring Boot依赖于Spring,而Spring Cloud又依赖于Spring Boot,因此Spring Boot2 ...

  9. Spring Boot(十四):spring boot整合shiro-登录认证和权限管理

    Spring Boot(十四):spring boot整合shiro-登录认证和权限管理 使用Spring Boot集成Apache Shiro.安全应该是互联网公司的一道生命线,几乎任何的公司都会涉 ...

  10. Spring Boot(十二):spring boot如何测试打包部署

    Spring Boot(十二):spring boot如何测试打包部署 一.开发阶段 1,单元测试 在开发阶段的时候最重要的是单元测试了,springboot对单元测试的支持已经很完善了. (1)在p ...

随机推荐

  1. jmeter实操及性能测试基础知识整理 - 不断更新

    主要基于jmetet工具 有任何疑问直接留言,可以相互讨论 线程组菜单: 线程数:并发数量Rame-Up时间(秒):多久跑完线程数,比如线程是10,Rame-Up时间是10秒,就是10秒内跑完10个线 ...

  2. JavaScript AJAX PHP

    AJAX PHP示例 AJAX用于创建更多交互式应用程序. 以下示例演示了当用户在输入字段中键入字符时,网页如何与Web服务器通信: <!DOCTYPE html> <html> ...

  3. 达能依靠Matrikon进行数据存储和分析

    达能是一家致力于通过食品实现健康的公司,业务遍及五大洲130多个国家.在罗马尼亚,达能每天在布加勒斯特的工厂生产100万瓶酸奶.由于质量和产品安全在达能最为重要,因此监控和分析工业过程需要非常高效才能 ...

  4. maven 学习---Maven依赖机制

    在 Maven 依赖机制的帮助下自动下载所有必需的依赖库,并保持版本升级. 案例分析 让我们看一个案例研究,以了解它是如何工作的.假设你想使用 Log4j 作为项目的日志.这里你要做什么? 1.在传统 ...

  5. Django 基于 jquery 的 ajax

    <1> $.ajax的两种写法: $.ajax("url",{}) $.ajax({}) <2> $.ajax的基本使用 $.ajax({ url:&quo ...

  6. Django框架(二十)-- Django rest_framework-权限组件

    一.权限组件的使用 # 用户信息表 class UserInfo(models.Model): name = models.CharField(max_length=32) # 写choice use ...

  7. Microsoft Surface 2019新品发布会汇总

    Microsoft Surface 2019 新品发布会汇总 10月2日晚,微软举行了Microsoft Surface 2019秋季新品发布会,本次发布会涉及如下设备内容等: SurfaceLapt ...

  8. Linux CentOs基本命令

    基本操作(命令模式下) yy --复制光标所在行 nyy --n为数字,复制光标所在向下n行 p --粘贴到光标的下一行 P --贴在光标的上一行 G --光标移到文件末尾 gg --光标移到文件头 ...

  9. 07webpack--下载对应的css模块

    <!--本节 loader配置处理css样式 在src下新建css文件夹 在css下创建index.css 在main.js这个入口文件中 引入js模块 和 css杨思表是不同的 在main.j ...

  10. HttpWatch功能详细介绍

    来源:https://www.cnblogs.com/Chilam007/p/6947235.html HttpWatch是功能强大的网页数据分析工具,集成在IE工具栏,主要功能有网页摘要.cooki ...