首页
  • 2024.1.1.0
  • 2024.1.1.1
  • 2024.1.2.0
  • 2024.1.3.0
  • Java
  • Linux
  • Deploy
  • Application
关于
友情链接
GitHub (opens new window)

Xiao ku

板砖师傅
首页
  • 2024.1.1.0
  • 2024.1.1.1
  • 2024.1.2.0
  • 2024.1.3.0
  • Java
  • Linux
  • Deploy
  • Application
关于
友情链接
GitHub (opens new window)
  • 版本日志
  • 贡献清单
  • 2024.1.3.0

  • 2024.1.2.0

  • 2024.1.1.1

    • Simple-Starter概述
    • 自动装配模块

      • simple-starter-web
      • simple-starter-redisson
      • simple-starter-s3
      • simple-starter-socket
      • simple-starter-grpc
        • 简介
        • 引入依赖
        • 配置项
        • 概念图
        • 介绍及使用
          • Grpc服务端
          • 基础使用
          • 增加请求头获取
          • Grpc客户端
          • 基础使用
          • 增加单独设置调用超时时间
          • 增加请求头参数设置
          • 只有一个请求头参数设置时
          • 有多个请求头参数设置时
      • simple-starter-datasource
      • simple-starter-freemarker
      • simple-starter-cloud
      • simple-starter-encrypt
      • simple-starter-dict
      • simple-starter-email
      • simple-starter-gateway
      • simple-starter-package
    • 服务类模块

    • 工具类模块

  • 2024.1.1.0

  • OpenSource
  • 2024.1.1.1
  • 自动装配模块
xiaoku
2023-04-03
目录

simple-starter-grpc

# 简介

提供注解简化使用:Grpc客户端、 Grpc服务端

# 引入依赖

    <dependencies>
        <dependency>
            <groupId>cn.iosd</groupId>
            <artifactId>simple-starter-grpc</artifactId>
            <version>Version</version>
        </dependency>
    </dependencies>
1
2
3
4
5
6
7

# 配置项

simple:
  ## simple-starter-grpc
  grpc:
    client:
      #Grpc客户端 缺省项为false 
      enabled: true
      #设置Grpc调用超时时间 缺省项为5000毫秒
      timeout: 5000
      channel:
        local-grpc-server:
          address: '127.0.0.1:12030'
    server:
      #Grpc服务端 缺省项为false 
      enabled: true
      port: 12030
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 概念图

概念图

# 介绍及使用

由helloworld.proto生成以下文件

文件名称 介绍
HelloReply 包含了 HelloReply 消息的定义,消息包含一个名为 message 的字符串字段。
HelloReplyOrBuilder 用于构建 HelloReply 消息,提供了 message 字段的 getter 和 setter 方法。
HelloRequest 包含了 HelloRequest 消息的定义,消息包含一个名为 name 的字符串字段。
HelloRequestOrBuilder 用于构建 HelloRequest 消息,提供了 name 字段的 getter 和 setter 方法。
HelloWorldProto 包含了 Simple 服务和其中的方法 SayHello 的定义,可以在客户端和服务器端使用。
SimpleGrpc 包含了客户端和服务器端用于实现 Simple 服务的方法,包括 SayHello 方法的实现。通过 gRPC 调用远程服务的接口。

# Grpc服务端

# 基础使用

通过继承 SimpleGrpc.SimpleImplBase 类并重写 SayHello 方法来实现服务器端的 Simple 服务。
同时,你需要在当前类上添加 @GrpcService 注解来表明这是一个 gRPC 服务端。客户端可以通过 gRPC 调用 SayHello 方法来与该服务端进行通信。

示例:

@GrpcService
public class GrpcHelloService extends SimpleGrpc.SimpleImplBase {
    @Override
    public void sayHello(HelloRequest req, StreamObserver<HelloReply> responseObserver) {
        HelloReply reply = HelloReply.newBuilder().setMessage("GrpcHelloService Hello ==> " + req.getName()).build();
        responseObserver.onNext(reply);
        responseObserver.onCompleted();
    }
}
1
2
3
4
5
6
7
8
9

# 增加请求头获取

实现ServiceCallStartHeaders接口,统一拦截获取请求头并返回校验结果

示例:

@Component
public class GrpcServiceCallStartHeaders implements ServiceCallStartHeaders {
    @Override
    public Status verifyHeaders(Metadata headers) {
        String value = headers.get(Metadata.Key.of("token", Metadata.ASCII_STRING_MARSHALLER));
        if (StringUtils.isEmpty(value)) {
            return Status.UNAUTHENTICATED.withDescription("请求头参数token值为空");
        }
        return Status.OK;
    }
}
1
2
3
4
5
6
7
8
9
10
11

# Grpc客户端

# 基础使用

在你的服务层类中使用 SimpleGrpc.SimpleBlockingStub 类,该类用于调用 gRPC 服务的方法。
同时,你需要在当前类上添加 @GrpcClient(value = "grpc-server-hello") 注解来表明这是一个 gRPC 客户端
value 值为 simple.grpc.client.channel.{value}.address 配置项的名称。
这样,你就可以通过注入的 Stub 对象发起调用并与远程服务通信。

示例:

@Service
public class GrpcDemoClientService {
    @GrpcClient(value = "grpc-server-hello")
    private SimpleGrpc.SimpleBlockingStub simpleStub;

    public String sendHelloMessage(final String name) {
        final HelloReply response = this.simpleStub.sayHello(HelloRequest.newBuilder().setName(name).build());
        return response.getMessage();
    }
}
1
2
3
4
5
6
7
8
9
10

# 增加单独设置调用超时时间

timeout 值为 设置Grpc调用超时时间-单位毫秒,默认5000毫秒 等同于配置文件配置项 simple.grpc.client.timeout 但优先级较高

示例:

@Service
public class GrpcDemoClientService {
    @GrpcClient(value = "grpc-server-hello", timeout = 10000)
    private SimpleGrpc.SimpleBlockingStub simpleStub;

    public String sendHelloMessage(final String name) {
        final HelloReply response = this.simpleStub.sayHello(HelloRequest.newBuilder().setName(name).build());
        return response.getMessage();
    }
}
1
2
3
4
5
6
7
8
9
10

# 增加请求头参数设置

# 只有一个请求头参数设置时

实现ClientCallStartHeaders接口,统一设置请求头参数值,所有请求将都会进入此方法

示例-实现类:

@Component
public class GrpcClientCallStartHeaders implements ClientCallStartHeaders {
    @Override
    public Map<String, String> headers() {
        return Collections.singletonMap("token", "ces1");
    }
}
1
2
3
4
5
6
7

注解无需指定实现类名称:

    @GrpcClient(value = "grpc-server-hello")
    private SimpleGrpc.SimpleBlockingStub simpleStub;
1
2
# 有多个请求头参数设置时

实现ClientCallStartHeaders接口,设置请求头参数值,注解需指定实现类名称才进入对应方法。

示例-实现类:

@Component
public class GrpcClientCallStartHeaders implements ClientCallStartHeaders {
    @Override
    public Map<String, String> headers() {
        return Collections.singletonMap("token", "ces1");
    }
}

@Component
public class GrpcSencondClientCallStartHeaders implements ClientCallStartHeaders {
    @Override
    public Map<String, String> headers() {
        return Collections.singletonMap("token", "ces2");
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

注解指定实现类名称,注 多个请求头拦截时需要增加注解值 headerBeanName :

    @GrpcClient(value = "grpc-server-hello",headerBeanName = "grpcSecondClientCallStartHeaders")
    private SimpleGrpc.SimpleBlockingStub simpleStub;
1
2
上次更新: 2024/03/25, 02:28:08
simple-starter-socket
simple-starter-datasource

← simple-starter-socket simple-starter-datasource→

Copyright © 2019-2024
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式