2016-03-23 11 views
1

Ich habe mehrere Objekte von Schlüssel-Wert-Typ, die ich an RabbitMQ senden muss und daher vorwärts sie verbrauchen würde. Also, nach dem Durchlaufen dieser RabbitMQ Verbindung. Es gibt nur die Möglichkeit, eine einfache Klartextnachricht zu veröffentlichen. Kann mir jemand sagen, wie man Kartenobjekte in RabbitMQ veröffentlichen und konsumieren soll?Wie zu veröffentlichen und zu konsumieren make (map [string] string) in 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:  ????, 
     }) 
+0

'map [string] string' ist eine ziemlich einfache Datenstruktur, warum nicht json verwenden? – JimB

Antwort

3

Sie müssen Ihr Go-Objekt zu zB serialisieren. Base64-Text vor der Veröffentlichung. In Ihrem Consumer deserialisieren Sie es dann, um Ihr Ausgangsobjekt zurück zu bekommen. Ein Beispiel in Go finden Sie unter "Golang serialize and deserialize back".

Für den Inhaltstyp bin ich nicht sicher, was am besten geeignet ist. application/octet-stream?

+1

Da der Typ hauptsächlich String-Daten ist ('map [string] string'), wird Json kompakter als ein Gob in base64. – JimB

+0

Ich stimme zu, JSON ist wahrscheinlich eine bessere Wahl aus vielen Gründen (einfacheres Debugging, Möglichkeit, es aus einer anderen Sprache zu lesen und zu interpretieren, etc.). Ich habe hier Base64 erwähnt, weil ich schnell ein Beispiel gefunden habe. Ich bin kein Go-Entwickler, daher konnte ich kein JSON-basiertes Beispiel vorbereiten. –