如何通过Spring AMQP获取完整Message对象而非仅消息内容
获取Spring AMQP响应的完整Message对象
你可以直接使用RabbitTemplate的sendAndReceive方法,它会返回完整的Message对象,而非自动转换后的消息内容,这样就能同时获取消息体和MessageProperties中的头信息。
示例代码如下:
public void sendAmqpCoreMessage(Message message) throws JsonProcessingException { // 发送消息并获取完整的响应Message对象 Message responseMessage = rabbitTemplate.sendAndReceive("jms.durable.queues", this.queue.getName(), message); if (responseMessage != null) { // 获取响应的MessageProperties(包含所有消息头) MessageProperties responseProps = responseMessage.getMessageProperties(); logger.info("Response headers: {}", responseProps.getHeaders()); // 手动解析消息体为目标类型 ObjectMapper objectMapper = new ObjectMapper(); List<MyCustomType> responseContent = objectMapper.readValue( responseMessage.getBody(), new TypeReference<List<MyCustomType>>() {} ); logger.info("Response content: {}", objectMapper.writeValueAsString(responseContent)); } }
关键说明:
sendAndReceive方法直接返回Message实例,不会自动处理消息体转换,因此可以直接调用getMessageProperties()获取所有头信息。- 消息体的解析需要手动通过ObjectMapper完成,逻辑和
convertSendAndReceiveAsType内部处理一致,但你能完全掌控解析过程。 - 务必判断返回的
responseMessage是否为null,避免空指针异常。
内容的提问来源于stack exchange,提问作者İlkay Gunel
相关产品推荐
相关产品推荐

