美文网首页
SpringBoot-Grpc使用Json传输数据,无须.pro

SpringBoot-Grpc使用Json传输数据,无须.pro

作者: BeRicher | 来源:发表于2019-01-18 13:47 被阅读0次

    Grpc介绍

    gRPC是一个现代的开源高性能RPC框架,可以在任何环境中运行。它可以有效地连接数据中心内和跨数据中心的服务,并提供可插拔的支持,以实现负载平衡,跟踪,健康检查和身份验证。它还适用于分布式计算的最后一英里,用于将设备,移动应用程序和浏览器连接到后端服务。

    Faster-Grpc

    Faster-Framework热衷于开发环境脚手架的快速集成与搭建,1.1.0版本开始Faster将grpc与SpringBoot进行了基础。并支持如下特性:

    1. 客户端通过动态代理来实现具体的请求方法,仅需要创建接口、标识注解即可使用,免除了编写实现类、maven生成父类的复杂步骤。
    2. 服务端通过反射调用被注解标识的类与方法接收请求。
    3. 使用JSON协议进行传输数据,序列化与反序列化默认使用Jackson,并提供了自定义Json序列化工具的方式。免除了编写.proto文件、参数顺序必须一致、参数数量必须一致等诸多困扰,

    快速开始

    希望您已经阅读过基本的grpc使用方式。如果您尚不熟悉,请移步grpc官方查看。

    grpc-java

    Maven配置

    我们基于SpringBoot进行构建。Maven配置如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>faster-test-grpc</groupId>
        <artifactId>faster-test-grpc</artifactId>
        <version>1.0-SNAPSHOT</version>
        <parent>
            <artifactId>spring-boot-starter-parent</artifactId>
            <groupId>org.springframework.boot</groupId>
            <version>2.1.1.RELEASE</version>
        </parent>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>cn.org.faster</groupId>
                <artifactId>spring-boot-starter-grpc</artifactId>
                <version>1.1.1.RELEASE</version>
            </dependency>
        </dependencies>
    </project>
    

    服务端

    application.yml

    faster:
      grpc:
        enabled: true
        server:
          enabled: true #实际可不写,默认开启
          port: 50051 #端口,不写默认50051
    

    编写服务类

    
    @GRpcApi("unary")
    @Slf4j
    public class UnaryService {
    
        @GRpcMethod
        public void testInt(int data, StreamObserver<Integer> response) {
            log.info("请求数据:{}", data);
            response.onNext(1);
            response.onCompleted();
        }
    }
    

    @GRpcApi中的值为scheme,客户端的@GRpcService(scheme="")与服务端相同时,即可定位到服务端的服务。

    @GRpcMethod默认获取当前方法名称,客户端同样使用此注解标识要调用的服务方法,可通过@GRpcMethod("xxx")修改名称,两者一致调用成功。

    注意:对于GRpc而言,请求参数中只能出现一个业务参数实体,才可通过序列化工具进行序列化,不可出现多个业务参数。

    客户端

    application.yml

    faster:
      grpc:
        enabled: true #实际可不写,默认开启
        client:
          enabled: true #实际可不写,默认开启
          services:
            test-unary: #与GRpcService中的value对应
              host: localhost # 远程主机地址
              port: 50051 # 远程端口号,不写默认50051
            test-server-stream: #与GRpcService中的value对应
              host: localhost #服务端host
    

    定义接口

    @GRpcService(value = "test-unary", scheme = "unary")
    public interface UnaryService {
        @GRpcMethod
        int testInt(int data);
    }
    

    @GRpcService中的value对应配置文件中services下的key,以此获取远程host与端口。

    @GRpcService中的scheme对应远程服务@GRpcApi("unary")中所定义的值,用于创建grpc fullMethod,两者一致,即可调用成功。

    @GRpcMethod默认获取当前方法名称,远程服务端同样使用此注解标识提供服务的方法,可通过@GRpcMethod("xxx")修改名称,两者一致调用成功。

    注意:对于GRpc而言,接口参数只能存在一个业务实体参数,才可通过序列化工具进行序列化,不可出现多个业务参数。

    调用

    @Slf4j
    @RunWith(SpringJUnit4ClassRunner.class)
    @SpringBootTest(classes = Application.class)
    public class UnaryTest{
        @Autowired
        private UnaryService unaryService;
    
        @Test
        public void testInt() {
            int result = unaryService.testInt(1);
            log.info("返回数据:{}", result);
        }
    }
    

    更多方式

    GRpc本身提供了多种服务方法供开发者使用,Faster同样集成并支持这些方法,可通过@GrpcMethod中的type进行修改。

    注意:当type做出改变后,对应的参数、返回值也必须相应调整。

    更多代码参见:

    faster-grpc-client-example

    faster-grpc-server-example

    快速开发框架
    高质量图片压缩工具

    相关文章

      网友评论

          本文标题:SpringBoot-Grpc使用Json传输数据,无须.pro

          本文链接:https://www.haomeiwen.com/subject/kekndqtx.html