Java 作为客户端 grpc 使用

99次阅读
没有评论

1. 引入依赖以及插件

依赖包如下:

<properties>
    <grpc.version>1.69.0</grpc.version>
    <protoc.version>3.25.3</protoc.version>
    <grpc-java.version>1.69.0</grpc-java.version>
</properties>
 
<!-- gRPC protobuf 依赖 -->
<dependency>
    <groupId>io.grpc</groupId>
    <artifactId>grpc-protobuf</artifactId>
    <version>${grpc.version}</version>
</dependency>
 
<!-- gRPC Stub 依赖 -->
<dependency>
    <groupId>io.grpc</groupId>
    <artifactId>grpc-stub</artifactId>
    <version>${grpc.version}</version>
</dependency>
 
<!-- grpc-netty-shaded -->
<dependency>
    <groupId>io.grpc</groupId>
    <artifactId>grpc-netty-shaded</artifactId>
    <version>${grpc.version}</version>
</dependency>
syntax = "proto3";
 
option java_multiple_files = false;
option java_package = "com.unipower.robot.server.component.grpc.power";
 
package powerManagement;
 
import "google/protobuf/empty.proto";
 
// 设备设置项
message DeviceSetting {
  string device = 1;    // 设备名称
  bool status = 2;      // 状态
  bool necessary = 3;   // 是否必要
}
 
// 设备电源控制请求
message DevicePowerControlRequest {
 
  // 设备控制指令。
  repeated DeviceSetting settings = 1;
}
 
// 设备电源控制响应
message DevicePowerControlResponse {
 
  // 状态码。
  // 成功:200;失败:500。
  int32 code = 1;
 
  // 操作结果消息。
  // 成功:操作成功;失败:操作失败,失败原因
  string message = 2;
}
 
message AppLayerPowerState {
  // 电池数据
  float voltage = 1;
  float current = 2;
  float rsoc = 3;
  float nominalCapacity = 4;
  uint32 cycleCount = 5;
  // ----
 
  // N1数据
  bool shutdownSignal = 6;
  bool buzzer = 7;
  bool motor = 8;
  // ----
 
  // N2数据
  bool appLayerCamera = 9;
  bool radar = 10;
  // ----
 
  // 数据采集时间戳
  uint64 timestamp = 11;
 
  // 可变部分
  string status = 12;
}
 
// L1E AppLayerPowerState.status JSON format
// "sideCharging": bool // 是否通过侧边充电中
// "bottomCharging": bool // 是否通过底部充电中
// "bottomChargeEnabled": bool // 底部充电开关状态
// "SC": bool // SC电源开关状态
// "controlBoardFan": bool // 控制板散热风扇开关状态
// "appBoardFan": bool // 应用板散热风扇开关状态
// "wiperFan": bool // 雨刷风扇开关状态
// "emergencyStopSignal": bool // 急停信号
// "alarmLight": bool // 告警灯开关状态
 
// 电源管理服务定义
service PowerManagementService {
  // 控制设备电源状态
  rpc SetDevicePowerState (DevicePowerControlRequest) returns (DevicePowerControlResponse);
 
  // 获取电源状态状态
  rpc GetAppLayerPowerStateOnce (google.protobuf.Empty) returns (AppLayerPowerState);
  rpc GetAppLayerPowerStateStream (google.protobuf.Empty) returns (stream AppLayerPowerState);
}
  • compile 负责生成 Protobuf 消息类,用于数据序列化和反序列化。
    • XXX.java(Protobuf 消息类):对应 .proto 文件中的 message 定义,作为数据传输对象 (DTO)。
    • XXXOrBuilder.java(接口):用于支持 Protobuf 生成的类的 Builder 模式。
  • compile-custom 作用是调用 protoc-gen-grpcjava 插件,生成 gRPC 相关的 Java 代码。
    • XXXGrpc.java(gRPC 服务类):包含 gRPC 服务器和客户端的存根 (stub)。
    • XXXGrpc.XxxBlockingStub(同步调用的客户端存根)
    • XXXGrpc.XxxFutureStub(异步调用的客户端存根)
    • XXXGrpc.XxxStub(非阻塞调用的客户端存根)
    • XXXGrpc.XXXImplBase(服务器端基类,服务端需要继承该类并实现具体逻辑)
  • compile 负责
    • 孙菲菲

2. 引入依赖以及插件

正文完
 0
评论(没有评论)