2016-04-30 32 views
1

這是RabbitMQ for Java: how to send multiple float values?RabbitMQ for Java:如何發送多個值?

的擴展取代3浮點參數,我想發送3個不同的類作爲參數,我想使用JSon協議。

服務器是用C#編寫的。因此我解碼服務器端的JSon字符串方法。

基本上在彩車方面對其他職位所提供的解決方案如下:

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

這將寫有big endian(默認的網絡秩序,什麼Java使用以及)的花車。

在接收端,你會怎麼做:

// 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(); 

我想給類汽車,飛機,船如從​​Java到C#

回答

0

格式的JSON我認爲汽車,飛機和船是簡單的JavaBeans類和他們的現場成員映射json合約。

您可以使用json編解碼器將您的對象序列化爲JSON。例如,您可以使用Jacksongson

類:

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){...};    
} 

的例子將使用Jackson和將輸出一個這樣的結構: {"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()); 

如果有一個JavaBeans或地圖它包裝論文3類中的代碼可能更簡單:

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

最後在C#端你應該創建相同的類和deserialize them

你可以使用一些JSON到Java/C#生成器,例如。 jsonschema2pojo