Kafka 接收消息(PB格式)


/**
* Kafka 接收消息 拆 根据   PB格式
*/
public class KafkaFZParamReceive extends KafkaRecieveBase<List<ConsumerRecord<String, FangzhenData.FzStreamPbFrame>>> {

    private List<AddressIpVo> addr;

    @Override
    @KafkaListener(topics = KafkaTopicEnum.FZ_PARAM_EXPORT_TOPIC)
    public void receive(List<ConsumerRecord<String, FangzhenData.FzStreamPbFrame>> crs, Acknowledgment acknowledgment) throws InvalidProtocolBufferException, UnsupportedEncodingException {
        List<FangzhenData.FzStreamPbFrame> fzStreamPbFrames = crs.stream()
                .map(ConsumerRecord::value)
                .filter(Objects::nonNull)
                .collect(Collectors.toList());
        for (FangzhenData.FzStreamPbFrame fzStreamPbFrame : fzStreamPbFrames) {
            if (fzStreamPbFrame.getHead() == null) {
                continue;
            }

            getAddr(fzStreamPbFrame.getHead());
            dealFzParam(fzStreamPbFrame);
        }
        acknowledgment.acknowledge();
    }

    private void dealFzParam(FangzhenData.FzStreamPbFrame fzStreamPbFrame) throws InvalidProtocolBufferException {
        FangzhenData.FzStreamHead head = fzStreamPbFrame.getHead();
        ByteString value = fzStreamPbFrame.getPayload().getValue();
        FangzhenData.FangzhenParamResults fangzhenParam = FangzhenData.FangzhenParamResults.parseFrom(value);
        Map<Long, FangzhenParamVo> startMap = new HashMap<>();
        for (FangzhenData.FangzhenParamResult fangzhenParamResult : fangzhenParam.getParamsResultList()) {

            FangzhenParamVo fangzhenParamVo = new FangzhenParamVo();
            if (!ValidUtil.isNumber(fangzhenParamResult.getValue())) {
                continue;
            }
            if (!startMap.containsKey(fangzhenParamResult.getStart())) {
                fangzhenParamVo.setStart((int) fangzhenParamResult.getStart());
                fangzhenParamVo.setEnd((int) fangzhenParamResult.getEnd());
                fangzhenParamVo.setValue(Integer.parseInt(fangzhenParamResult.getValue()));
                startMap.put(fangzhenParamResult.getStart(), fangzhenParamVo);
            } else {
                fangzhenParamVo = startMap.get(fangzhenParamResult.getStart());
                fangzhenParamVo.setValue(Integer.parseInt(fangzhenParamResult.getValue()) + fangzhenParamVo.getValue());
            }
       }
  }

PB格式

syntax = "proto3";
package HLProtobuf;

//找机会统一下此PB文件的包路径和格式

import "google/protobuf/any.proto";
import "google/protobuf/timestamp.proto";

option java_package = "com.hlht.core.pb";
option java_outer_classname = "FangzhenData";

//流式数据
message FzStreamPbFrame {
    FzStreamHead head = 1;
    google.protobuf.Any payload = 2;
}

//信息头
message FzStreamHead {
    // 信宿
    string did = 1;
    // 包头组装好的数据
    string headH = 2;
    // 数据部分组装好的数据
    string dataH = 3;
    // 识别字,数据库code字段
    string code = 4;
}

// 单个原始数据
message FangzhenParam {
    //数据起始位
    uint64 start = 1;
    //数据结束位
    uint64 end = 2;
    // 参数识别字
    string paramWord = 3;
    // 要计算的值
    string value = 4;
}

// 参数数组
message FangzhenParams {
    // 参数数据列表
    repeated FangzhenParam params = 1;
}

// 单个结果数据
message FangzhenParamResult {
    //数据起始位
    uint64 start = 1;
    //数据结束位
    uint64 end = 2;
    // 参数识别字
    string paramWord = 3;
    // 原始值
    string origin = 4;
    // 要计算的值
    string value = 5;
}

// 参数结果数组
message FangzhenParamResults {
    // 处理结果
    repeated FangzhenParamResult paramsResult = 1;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值