文档地址:https://developers.google.cn/protocol-buffers/
1.下载 protocol
https://github.com/protocolbuffers/protobuf
protobuf-master.zip
2.解压缩至工程目录下
3.下载编译器
https://github.com/protocolbuffers/protobuf/releases
protoc-3.15.6-win32.zip
4.解压缩至项目所在位置src文件夹
5.配置 exe 位置至系统环境变量 PATH 验证是否安装成功
C:\Users\haatin>protoc
...
C:\Users\haatin>protoc --version
libprotoc 3.15.6
6.编写 proto 文件
syntax = "proto3";
message SysUser {
string userId = 1; //message体内的字段序号从1开始往下排
string userCode = 2;
string userName = 3;
string userPwd = 4;
string userEmail = 5;
string userPhone = 6;
int32 userStatus = 7;
string createTime = 8;
string loginTime = 9;
string lastLoginTime = 10;
int32 loginCount = 11;
}
注:2和3的版本有区别,3的版本不能为字段添加 require 必填
7.生成 java 文件
C:\Users\haatin>protoc -I=D:\WorkSpace --java_out=D:\WorkSpace D:\WorkSpace\sys_user.proto
protoc -I=输入路径 --java_out=输出路径 proto文件绝对路径
8.生成文件的使用
private SysUserOuterClass.SysUser getSysUserOuterClass(){
SysUserOuterClass.SysUser.Builder builder = SysUserOuterClass.SysUser.newBuilder();
builder.setUserId("record_id");
builder.setUserCode("user_code");
builder.setUserName("user_name");
builder.setUserPwd("user_pwd");
builder.setUserEmail("user_email");
builder.setUserPhone("user_phone");
builder.setUserStatus(1);
builder.setCreateTime("2020-12-12 12:12:12");
builder.setLoginTime("2020-12-12 12:12:12");
builder.setLastLoginTime("2020-12-12 12:12:12");
builder.setLoginCount(1);
SysUserOuterClass.SysUser build = builder.build();
return build;
}
@Override
public void sendMessage(String topic, String message) {
byte[] bytes = this.getSysUserOuterClass().toByteArray();
ListenableFuture<SendResult<String, String>> resultData = kafkaTemplate.send(topic, bytes);
}
@KafkaListener(topics = "${spring.kafka.template.default-topic}", groupId = "${spring.kafka.consumer.group-id}")
public void listener(ConsumerRecord<byte[], byte[]> record) {
logger.info("消费者入参");
byte[] value = record.value();
logger.info("数据消费成功: {}", value);
try {
SysUserOuterClass.SysUser sysUser = SysUserOuterClass.SysUser.parseFrom(record.value());
logger.info("数据消费成功 SysUserOuterClass.SysUser: {}", sysUser);
} catch (Exception e) {
logger.info("【kafka消费服务】 消费发生异常,log异常原因:{}",e);
}
}