为了账号安全,请及时绑定邮箱和手机立即绑定

如何在rabbitmq go lang中发布和使用make(map[string]string)

如何在rabbitmq go lang中发布和使用make(map[string]string)

Go
饮歌长啸 2021-12-27 15:43:35
我有多个键值类型的对象,我需要将它们发送到 RabbitMQ,因此转发会消耗它们。所以,在通过这个RabbitMQ链接之后。它只说明发布简单纯文本消息的方式。谁能告诉我如何在 RabbitMQ go lang 中发布和使用地图对象?     m := make(map[string]string)     m["col1"] = "004999010640000"     m["col2"] = "awadwaw"     m["col3"] = "13"       err = ch.Publish(        "EventCaptureData-Exchange", // exchange        q.Name + "Key",          // routing key        true,           // mandatory                                    false,           // immediate        amqp.Publishing{            ContentType: "?????",            Body:        ????,        })
查看完整描述

2 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

您需要将 Go 对象序列化为例如。发布之前的 base64 文本。在您的消费者中,您然后反序列化它以取回您的初始对象。有关Go 中的示例,请参阅“ Golang 序列化和反序列化”。

对于内容类型,我不确定什么是最合适的。application/octet-stream?


查看完整回答
反对 回复 2021-12-27
?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

太简单了。您可以使用json和bytes包来序列化和反序列化消息。为你准备了这个例子:


type Message map[string]interface{}


func serialize(msg Message) ([]byte, error) {

    var b bytes.Buffer

    encoder := json.NewEncoder(&b)

    err := encoder.Encode(msg)

    return b.Bytes(), err

}


func deserialize(b []byte) (Message, error) {

    var msg Message

    buf := bytes.NewBuffer(b)

    decoder := json.NewDecoder(buf)

    err := decoder.Decode(&msg)

    return msg, err

}

是的,基本上就是这样。RabbitMQ库中的主体字段是字节数组,因此您只需要在数据结构和字节数组之间进行转换。


查看完整回答
反对 回复 2021-12-27
  • 2 回答
  • 0 关注
  • 251 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号