我正在使用版本2.0.0的Java Spring AMQP的快照。我創建了AMQP消息,發送它。在另一個服務中,我正確接收消息,除了頭部而不是接收類型Object,每個頭部都是String類型。Spring AMQP標題僅返回字符串
出版社代碼:
Message responseMessage = MessageBuilder
.withBody(SerializationUtils.serialize(person))
.setContentType(MessageProperties.CONTENT_TYPE_SERIALIZED_OBJECT)
.setHeader("STUDENT_TYPE", "New") // Not part of person object but related
.setHeader("PET", getPet()) // This is a pet object
.build();
rabbitTemplate.send(responseMessage);
消費者代碼:
Object messageBody = SerializationUtils.deserialize(amqpMessage.getBody());
Person person = (Person)messageBody;
MessageProperties properties = amqpMessage.getMessageProperties();
String type = properties.getHeaders().get("STUDENT_TYPE").toString();
Pet pet = (Pet)properties.getHeaders().get("PET");
當我運行上面的代碼,我將與錯誤的消費者在最後一行代碼失敗:不能投字符串寵物。消息通過OK,除了在消費者代碼中接收到的每個頭都是String類型。
USAGE: MessageBuilder.setHeader(String Key, Object Value);
USAGE: Properties.getHeaders() returns Map<String,Object>
每個頭都有鍵入字符串/對象的鍵/值對。周圍的工作也在序列化一個頭,我想傳遞非字符串/整數值,但這似乎是除了標題點之外。我錯過了什麼嗎?
它在哪裏明確地說我的「字符串」真的是一隻寵物?我正在填充標題。標題只是一個地圖條目。此映射條目是此鍵值對的類型 - KEY是STRING,VALUE是OBJECT。 -,headers.put(「MyNewPet」,myDog); - 但另一方面,當我拉出標題時,突然地圖現在是 - 對象發生了什麼? –
Aerith
我想這是因爲amqp不會將您的對象序列化爲字節,很可能它只是調用toString()並通過代理傳遞字符串。據我所知,這些隊列只傳遞字符串 –