1

我有多个键值类型的对象,我需要将它们发送到 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:        ????,
        })
4

2 回答 2

3

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

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

于 2016-03-23T11:43:02.330 回答
3

就是这么简单。您可以使用jsonbytes包来序列化和反序列化消息。为你准备了这个例子:

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库中的正文字段是字节数组,因此您只需要在数据结构与字节数组之间进行转换。

于 2018-06-02T11:12:25.097 回答