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

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

作者: 你累吗 | 来源:发表于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

    Grpc介绍 gRPC是一个现代的开源高性能RPC框架,可以在任何环境中运行。它可以有效地连接数据中心内和跨数据中...

  • FastJson中@JSONField注解使用

    FastJson中@JSONField注解使用 我们通常使用json格式在服务器之间进行数据传输。 如果json格...

  • springboot2.x使用FastJson为Http消息转换

    Springmvc前后台数据交互的时候,很多情况下使用的JSON来传输数据,前提使用了@RequestBody @...

  • JSON字符串生成对应的实体类

    一、需求场景   最近进行接口开发和第三方接入,数据传输格式使用JSON,服务端将JSON数据序列化为对象使用,因...

  • 高效率地保存多个 Python 对象!你学会了吗?

    json文件因其简洁精炼,在网上特别流行,我们写爬虫时经常碰到网站使用json格式传输数据。但是如果要存储的数据有...

  • android中JSON的解析

    android中网络数据传输是经常被用到的,通常我们使用xml或者json,而json更加轻量,便捷,我们使用的更...

  • Python-json解析

    1.情景 爬虫离不了json的解析,但是目前很多网站中都使用json进行数据传输,动态展现,所以json的解析对于...

  • 在Dart中使用json数据

    前言 在我们开发中,目前主要数据传输都是使用json格式的数据,但是在dart中是没有json数据这一类型的,所以...

  • Golang使用protobuf

    为什么要使用protobuf 最近的项目中,一直使用Json做数据传输。Json用起来的确很方便。但相对于prot...

  • 序列化,序列化高级

    序列化 序列化:把对象(Dict)转成可传输数据(JSON) 反序列化:把传输数据(json)转成对象(Dict)...

网友评论

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

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