gpt4 book ai didi

go - 从 amqp 解码消息正文时出错

转载 作者:行者123 更新时间:2023-12-01 22:20:08 24 4
gpt4 key购买 nike

我正在尝试使用 AMQP 在消息正文中发送 JSON 并接收它。消息发送没有任何错误,但是我无法在另一端解码它。我得到一个 unexpected end of JSON input错误。
JSON:

var jsonStr = []byte(`
{
"name": "Test",
"phone_number": "12345"
}`)
err = files.SendMessageToCore(jsonStr, "event.saveorder")
if err != nil {
logr.Error("Error sending a message to rabbitmq:", fmt.Sprintf("%v", err))
}
SendMessageToCore 函数:
func SendMessageToCore(body []byte, routingKey string) error {
pb, err := GetRabbitPublisher()
if err != nil {
return err
}

var message amqp.Message
message.Exchange = "example"
message.RoutingKey = routingKey
message.Body = body
messageByte, err := json.Marshal(message)
if err != nil {
return err
}
err = (*pb).Publish(amqp.Message{Exchange: message.Exchange, RoutingKey: message.RoutingKey, Body: messageByte})
if err != nil {
return err
}
fmt.Println("Message was successfully sent")
return nil
}
解码部分:
func SaveOrderEventHandler(mes amqp.Message) *amqp.Message {
var incomingMessage amqp.Message
if err := json.Unmarshal(mes.Body, &incomingMessage); err != nil {
fmt.Println(err)
return nil
}

var user foodDomain.User
if err := json.Unmarshal(incomingMessage.Body, &user); err != nil {
fmt.Println("Error unmarshalling incomingMessage body: ", err) //Error appears here
return nil
}
fmt.Println(user.PhoneNumber)

return nil
}
用户结构:
type User struct {
Name string `json:"name"`
PhoneNumber string `json:"phone_number"`
}

最佳答案

在您的 SendMessageToCore你已经初始化了amqb.Message .无需在 Publish 中重新初始化func,只需传递您初始化的message .另外,您的 json字符串 body已经在 jsonByte ,所以不需要marshal再一次。
例如 -

func SendMessageToCore(body []byte, routingKey string) error {
pb, err := GetRabbitPublisher()
if err != nil {
return err
}

var message amqp.Message
message.Exchange = "example"
message.RoutingKey = routingKey
message.Body = body
err = (*pb).Publish(message)
if err != nil {
return err
}
fmt.Println("Message was successfully sent")
return nil
}
还有你的 mes已经在 amqp.Message类型,因此无需解码 mes.Body进入 amqp.Message类型变量。
直接 unmarshal您的 mes.Body进入 user .
func SaveOrderEventHandler(mes amqp.Message) *amqp.Message {
var user foodDomain.User
if err := json.Unmarshal(mes.Body, &user); err != nil {
fmt.Println(err)
return nil
}

fmt.Println(user.PhoneNumber)

return nil
}

关于go - 从 amqp 解码消息正文时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64021689/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com