Senden einer Binärdatei über RabbitMQ

8

Ich spezifiziere gerade ein Design, das RabbitMQ als Nachrichtenwarteschlange verwendet. Die Nachricht wird einen JSON-Text enthalten, und für eine bestimmte Nachricht möchte ich eine kleine Binärdatei hinzufügen.

Was ich gerne wissen würde, ist, ob die Daten der Binärdatei Teil der JSON-Nachricht sein sollen, oder kann sie separat an die Nachricht angehängt werden?

    
riqitang 27.02.2014, 13:54
quelle

3 Antworten

11

Die Nachricht ist ein einzelner Byte-Stream, sie enthält auch einen Header, aber das ist weniger relevant. Ich schlage vor, dass Sie einen von zwei Ansätzen nehmen. Ihr JSON-Objekt enthält ein Feld, das der Byte-Stream der Binärdatei ist. Alternativ gibt es die Adresse, unter der die Datei heruntergeladen werden kann. Wenn die Binärdatei klein ist, sollte die erste gut funktionieren. Andernfalls bevorzugen Sie vielleicht Letzteres.

    
robthewolf 27.02.2014, 14:29
quelle
10

Da RabbitMQ Message Payload nur ein binäres Array ist, sollten Sie Ihren Nachrichtentext mit 3 Feldern codieren:

  1. Dateigröße
  2. Binärdaten einer Datei
  3. Json

Ich stimme einer früheren Antwort zum Einbetten einer Datei in json nicht zu. Wenn Sie Datei-Daten innerhalb von JSON kodieren, erhalten Sie verschwendeten Speicherplatz aufgrund von JSON-Escaping + unnötige CPU-Nutzung aufgrund von JSON-Kodierung / Dekodierung der Datei-Daten + Sie müssen Datei-Daten zweimal lesen (einmal für JSER-Deserialisierung und noch einmal zu kopieren) wo es hin muss)

    
cohadar 24.01.2016 17:04
quelle
3

Wir verwenden RabbitMQ und Dateitransfer. Es funktioniert ein wenig langsam, aber für die Aktualisierung von weit entfernten Kunden ist es duable. Ich würde Ihnen folgende Richtlinien empfehlen: Erstellen Sie eine Nachrichtenstruktur für jeden Block, den Sie senden mit Befehl, Offset und CRC32, Datenlänge, maximal 60kByte pro Block von Daten, geben Sie einen Zähler, am Ende ein sha256, um sicherzustellen, dass die Daten korrekt sind , make tar optional, so dass die Daten können viel kleiner und die Übertragung ist schneller .. machen eine Verzeichnis Sache, um zu sehen, welche Dateien zu aktualisieren ... Verwenden Sie eine Broadcast-Ereignis um zu sehen, wer verfügbar ist und 1 Kunde zu einer Zeit mit Client zu aktualisieren. company.update orso, wo ein Kunde auf .company hört. viel Spaß! p.s. wir haben dafür auch einen linux-service erstellt, der automatisch beim kunden startet.

    
Bart Mensfort 17.04.2016 18:32
quelle

Tags und Links