【go brotbuf】go序列化brotbuf 数据集发送kafka

Go 语言中常用的序列化方式有很多,其中 Google 的 Protocol Buffers(简称 Protobuf)是一种高效、可扩展和跨平台的序列化格式,被广泛应用于分布式系统中。在本篇博客中,我们将介绍如何使用 Go 语言的 Protobuf 库来序列化数据。

在开始之前,我们需要先安装 Protobuf 编译器。你可以从 官网 上下载对应操作系统的编译器版本,并按照官方文档进行安装。

tag.proto文件内容如下:

syntax = "proto3";
package proto;


// 添加下面的go_package,分号前表示生成的**.pb.go文件的存放地址(会自动生成目录),分号后表示*.pb.go文件所属的包名

option go_package = "/modules/agent/builder/dcs";

message param {
    
    
    string name = 1;
    string time = 2;
    string value = 3;
}

message interface_param {
    
    
    repeated param Param = 1;
}

如何根据上面的tag.proto 自动生成tag.pg.go 文件呢
如果您想在golang中导入tag.pb.go文件,可以使用以下步骤:

确保您已经安装了gRPC和protobuf编译器。如果没有安装,可以通过以下命令进行安装:

go get github.com/Shopify/sarama
go get -u google.golang.org/grpc
go get google.golang.org/protobuf
go get -u github.com/golang/protobuf/protoc-gen-go
protoc --go_out=. --plugin=protoc-gen-go="D:\\Program Files\\Go\\code\\bin\\protoc-gen-go.exe" data.proto

如何序列化protbuf 发送kafka呢
send_kafka.go

package main

import (
	"awesomeProject/modules/agent/builder/dcs"
	"fmt"
	"github.com/Shopify/sarama"
	"github.com/golang/protobuf/proto"
	"time"
)

func main() {
    
    
	// 获取当前时间并格式化为指定的字符串
	kfk_time := time.Now().Format("20060102150405")
	fmt.Println(kfk_time)
	// 创建一个param对象
	p := &dcs.Param{
    
    
		Name:  "longkui_count",
		Time:  kfk_time,
		Value: "123.45",
	}

	// 序列化param对象
	data, err := proto.Marshal(p)
	if err != nil {
    
    
		// 错误处理
		fmt.Println("Failed to marshal param:", err)
		return
	}

	// 创建Kafka生产者
	producer, err := sarama.NewSyncProducer([]string{
    
    "kafka1:9092"}, nil)
	if err != nil {
    
    
		// 错误处理
		fmt.Println("Failed to create Kafka producer:", err)
		return
	}
	defer producer.Close()

	// 构造消息
	message := &sarama.ProducerMessage{
    
    
		Topic: "test-topic",
		Value: sarama.ByteEncoder(data),
	}

	// 发送消息
	_, _, err = producer.SendMessage(message)
	if err != nil {
    
    
		// 错误处理
		fmt.Println("Failed to send message to Kafka:", err)
		return
	}

	fmt.Println("Message sent to Kafka.")
}

猜你喜欢

转载自blog.csdn.net/u013421629/article/details/130154000
go