我将Java Spring与AMQP 2.0.0版快照一起使用。我创建了一条AMQP消息,发送它。在另一个服务中,我正确地接收了消息,除了头而不是接收类型Object之外,每个头都是类型String。
发布者代码:
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");
当我运行上述代码时,我将在消费者代码的最后一行失败,并显示错误:Cannot cast String to Pet。消息显示正常,但在消费者代码中接收到的每个头都是String类型。
USAGE: MessageBuilder.setHeader(String Key, Object Value);
USAGE: Properties.getHeaders() returns Map<String,Object>
每个头都有类型为String/Object的键/值对。我所做的工作还包括序列化一个我想为其传递非字符串/整数值的标头,但这似乎是在标头的点之外。我错过了什么吗?