当使用 Golang 发送复杂类型的消息到 RocketMQ 时,你需要先将消息序列化为字节流,在发送之前进行反序列化。下面是一个示例代码:
首先,确保你已经安装了 Go 并设置好环境。
- 安装 RocketMQ Go SDK:
go get -u github.com/apache/rocketmq-client-go/v2
- 导入所需的包和初始化生产者实例:
package main
import (
"context"
"encoding/json"
"fmt"
"github.com/apache/rocketmq-client-go/v2"
"github.com/apache/rocketmq-client-go/v2/primitive"
)
type CustomMessage struct {
ID int `json:"id"`
Message string `json:"message"`
}
func main() {
p, _ := rocketmq.NewProducer(
rocketmq.WithNameServer([]string{"localhost:9876"}),
)
err := p.Start()
if err != nil {
fmt.Printf("Failed to start producer: %s\n", err)
return
}
defer p.Shutdown()
}
请注意,将 localhost:9876 替换为你实际的 NameServer 地址。
- 创建要发送的复杂类型消息并发送:
msg := &CustomMessage{
ID: 123,
Message: "Hello, RocketMQ!",
}
data, err := json.Marshal(msg)
if err != nil {
fmt.Printf("Failed to serialize message: %s\n", err)
return
}
rocketMsg := &primitive.Message{
Topic: "your_topic",
Body: data,
}
res, err := p.SendSync(context.Background(), rocketMsg)
if err != nil {
fmt.Printf("Failed to send message: %s\n", err)
return
}
fmt.Printf("Send message success. Result: %s\n", res.String())
将 "your_topic" 替换为你实际的主题名称。
这是一个简单的示例代码,你可以根据自己的需求进行进一步定制和扩展。记得处理错误情况以及在不需要时关闭生产者实例。
内容由零声教学AI助手提供,问题来源于学员提问




