Skip to content

ninggf/gsvc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

APZDA CLOUD GSVC

A Toy Based on Spring Boot and Grpc-Java.

Monolithic MicroService doc

它不是轮子,更不是新的框架!只是作者觉得(自以为是)OpenFeign的限制使得有些需求无法实现(可单体部署、又可以微服务部署), 然后整合Spring Boot, Spring CloudGrpc-Java基于Protocol Buffers 搞的一个看上去解决了OpenFeign这些限制的小玩具, 顺带实现了一个小小的网关来隔离南北与东西流量。

Feature

  1. 单、微皆可: 打包在一起部署就是单体应用,分开部署就是微服务架构应用,不需要修改代码即可实现。
  2. 流量隔离: 通过内置网关实现南北流量与东西流量隔离,让内部的流量仅内部可见。
  3. 观测、流控与安全: 微调Spring Security提供安全保证、基于Spring Actuator提供可观性、整合Sentinel实现流控。
  4. 分布式事务:基于Seata实现。

版本

Version Spring Boot Spring Cloud protobuf-Java grpc-java
1.2.x 3.2.x 2023.0.3 3.25.x 1.64.0
3.3.x 3.3.x 2023.0.3 4.28.x 1.64.0

使用

1. 编写portobuf接口协议

请阅读apzda-cloud-gsvc-demo/demo-protos下的工程源码。

  1. 建议使用独立的maven工程来定义接口与实现工程分离。
  2. 只支持proto3

特别说明:

  1. 网关与基于WebClient客户端(类似OpenFeign的客户端)的调用只支持: UNARYSERVER-STREAMING
  2. 网关会将SERVER-STREAMING方法转成SSE(Server-Sent Events), 如果该方法是南北流量,请保证客户端可以处理。
  3. 东西流量使用grpc调用时,支持所有种类(UNARY, SERVER-STREAMING, CLIENT-STREAMING, BIDI-STREAMING)的方法。
  4. 单体部署时,需要关闭分布式事务,因此TCC模式会失效。

2. 实现接口协议

请阅读apzda-cloud-gsvc-demo下的工程源码。

3. 远程调用(微服务架构)

请阅读apzda-cloud-gsvc-demo下的工程源码。

调用关系如下:

      foo 
    ↗  ↓
demo → bar → math

4. 单体应用

请阅读apzda-cloud-gsvc-demo/demo-allinone-app工程的源码。

运行DEMO

  1. 将工程导入到IntelliJ IDEA
  2. gsvc-compiler 安装(或mvn install)到本地。
  3. 执行编译(或mvn compile)。
  4. 在本地启用一个redis服务器(或改配置连远程redis)。
  5. 启动服务: math,foo,bar,demo
    • 打开bar-test.httpfoo-test.httpdemo-test.http。 环境选dev,然后执行。
  6. 启动: math,allinone
    • 打开bar-test.httpfoo-test.http。 环境选sit,然后执行。

文档

文档传送门

参与

  1. 欢迎PR
  2. 欢迎提ISSUE
  3. 欢迎提建议(意见请保留)。