JAVA使用ProtoBuf与grpc

1.添加ProroBuf和grpc依赖

        <!--  proto 与 Json 互转会用到-->
        <dependency>
            <groupId>com.google.protobuf</groupId>
            <artifactId>protobuf-java-util</artifactId>
            <version>3.21.7</version>
        </dependency>
        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-api</artifactId>
            <version>1.51.0</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-protobuf</artifactId>
            <version>1.51.0</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-stub</artifactId>
            <version>1.51.0</version>
            <scope>compile</scope>
        </dependency>

2.定义protobuf文件signaling_message.proto

syntax = "proto3";
package com.xxxx.common.proto;
option java_package = "com.xxxx.common.proto";
option java_outer_classname="ProtoBufUtil";
service SignalingService{
    // 简单模式
    rpc sendSms(SignalingMessage) returns (SignalingResponse);
}
message SignalingResponse{
    int32 code = 1;
    string message = 2;
    bytes data = 3;
    //消息ID
    int64 messageid = 4;
}
message SignalingMessage {
    //消息ID
    int64 messageid = 1;
    //消息类型
    int32 cmd = 2;
    //发送者
    string from = 3;
    //接收者
    string to = 4;
    //时间戳
    int64 timestamp = 5;
    //消息体
    bytes body = 6;
}

生成protobuf类和 grpc类

下载并配置好protoc环境变量,下载protoc-gen-grpc-java,解压好,给protoc-gen-grpc-java.exe授予执行权限。

执行以下命令生成

protoc --plugin=protoc-gen-grpc-java=/Users/xxxxx/protoc-22.2/bin/protoc-gen-grpc-java.exe --grpc-java_out=./ signaling_message.proto

protoc --java_out=./ signaling_message.proto

3. 定义rpc server类

@GrpcService
@Slf4j
public class GrpcServerService extends SignalingServiceGrpc.SignalingServiceImplBase{
    @Override
    public void sendSms(com.xxxx.common.proto.ProtoBufUtil.SignalingMessage request,
                        io.grpc.stub.StreamObserver<com.xxxx.common.proto.ProtoBufUtil.SignalingResponse> responseObserver){
        log.info("request = {}",request);
        responseObserver.onNext(ProtoBufUtil.SignalingResponse.newBuilder().setCode(200).setMessage("success").build());
        responseObserver.onCompleted();
    }
}

4.发送RPC消息

    @GrpcClient("local-grpc-server")
    private SignalingServiceGrpc.SignalingServiceBlockingStub signalingStub;

    ProtoBufUtil.SignalingMessage signalingMessage = ProtoBufUtil.SignalingMessage.newBuilder()
                                .setFrom(from)
                                .setTo(to)
                                .setBody(ByteString.copyFrom(body, Charset.forName("UTF-8")))
                                .build();
    this.signalingStub.sendSms(signalingMessage);

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值