【发布时间】:2016-09-15 06:57:15
【问题描述】:
我正在使用带有 AMQP 版本 2.0.0 快照的 Java Spring。我创建了一个 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");
当我运行上述代码时,我将在消费者代码的最后一行失败,并显示错误:无法将字符串转换为宠物。消息正常,除了在消费者代码中接收到的每个标头都是 String 类型。
USAGE: MessageBuilder.setHeader(String Key, Object Value);
USAGE: Properties.getHeaders() returns Map<String,Object>
每个标题都有字符串/对象类型的键/值对。我所做的工作也是序列化我想传递非字符串/整数值的标头,但这似乎超出了标头的重点。我错过了什么吗?
【问题讨论】:
标签: java spring rabbitmq message amqp