2016-04-30 4 views
1

Dies ist eine Erweiterung auf RabbitMQ for Java: how to send multiple float values?RabbitMQ für Java: Wie man mehrere Werte sendet?

Statt 3 float Parameter, möchte ich drei verschiedene Klassen als Parameter senden, und ich möchte das JSon-Protokoll verwenden.

Der Server ist in C# geschrieben. Daher dekodiere ich die JSon-String-Methode der Serverseite.

Grundsätzlich ist die Lösung auf der anderen Beitrag in Bezug auf die Schwimmer angeboten wird, ist wie folgt:

final ByteBuffer buf = ByteBuffer.allocate(12) // 3 floats 
    .putFloat(f1).putFloat(f2).putFloat(f3); // put them; .put*() return this 
channel.basicPublish(buf.array());    // send 

Dadurch werden die Schwimmer in Big-Endian (Standard-Netzwerk-Auftrag und was Java verwendet auch) schreiben.

Auf der Empfangsseite, würden Sie tun:

// delivery is a QueuingConsumer.Delivery 

final ByteBuffer buf = ByteBuffer.wrap(delivery.getBody()); 
final float f1 = buf.getFloat(); 
final float f2 = buf.getFloat(); 
final float f3 = buf.getFloat(); 

aber I Klasse Auto, Flugzeug, Boot als JSon von Java nach C# formatiert senden möchten

Antwort

0

Ich gehe davon aus Auto, Flugzeug und Boot sind einfach JavaBeans Klassen und ihre Außendienstmitarbeiter Karte der Json Vertrag.

Sie könnten einen JSON-Codec verwenden, um Ihre Objekte in JSON zu serialisieren. Zum Beispiel können Sie Jackson oder gson verwenden.

Klassen:

class Car { 
    private String model; 
    public String getModel(){}; 
    public void setModel(String model){...};    
} 
class Airplane { 
    private String model; 
    public String getModel(){}; 
    public void setModel(String model){...};    
} 
class Boat { 
    private String model; 
    public String getModel(){}; 
    public void setModel(String model){...};    
} 

Das Beispiel wird verwenden Jackson und ausgeben wird eine Struktur wie folgt aus: {"car":{"model":"xxx"},"boat":{"model":"xxx"}, ,"airplane":{"model":"xxx"}}

// Create the jsonFactory with an object mapper to serialize object to json 
JsonFactory jsonFactory = new JsonFactory(new ObjectMapper()); 

// Create the byte array output stream 
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 

// Create the json generator 
JsonGenerator generator = jsonFactory.createGenerator(outputStream); 

// Write the start object, ie. {} 
generator.writeStartObject(); 
// Write the car "car":{} 
generator.writeObjectField("car" , car); 
// Write the car "boat":{} 
generator.writeObjectField("boat" , boat); 
// Write the car "airplane":{} 
generator.writeObjectField("airplane" , airplane); 
// Close the object 
generator.writeEndObject(); 
// And the generator 
generator.close(); 

// Convert the byte array stream to a byte array and publish the message 
channel.basicPublish(outputStream.toByteArray()); 

Wenn Sie ein Java Beans oder eine Karte haben, die den Code Thesen 3 Klassen hüllt kann einfacher sein:

ObjectMapper mapper = new ObjectMapper(); 
byte[] bur = mapper.writeValueAsBytes(wrapper); 
channel.basicPublish(outputStream.toByteArray()); 

Schließlich auf der C# -Seite sollten Sie die gleiche Klasse und deserialize them erstellen.

Sie könnten einige JSON zu Java/C# Generator, z. jsonschema2pojo.