我嘗試使用Spring Boot和AMQP基於展平的MAP發送消息。然後應該使用@RabbitListener接收消息並將其傳回MAP。Spring AMQP @RabbitListener轉換爲原始對象
首先,我有嵌套的JSON字符串和平板,並使用下面的代碼發送:
// Flatten the JSON String returned into a map
Map<String,Object> jsonMap = JsonFlattener.flattenAsMap(result);
rabbitTemplate.convertAndSend(ApplicationProperties.rmqExchange, ApplicationProperties.rmqTopic, jsonMap, new MessagePostProcessor() {
@Override
public Message postProcessMessage(Message message) throws AmqpException {
message.getMessageProperties().setHeader("amqp_Key1", "wert1");
message.getMessageProperties().setHeader("amqp_Key2", "Wert2");
message.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT);
return message;
}
});
到目前爲止好。
在接收站點上,我嘗試使用一個監聽器,並將消息負載轉換回之前發送的映射。
問題在於我不知道如何去做。 我收到消息用下面的代碼:
@RabbitListener(queues = "temparea")
public void receiveMessage(Message message) {
log.info("Receiving data from RabbitMQ:");
log.info("Message is of type: " + message.getClass().getName());
log.info("Message: " + message.toString());
}
正如我之前提到的,我不知道我是如何將消息轉換到我的舊地圖。消息的__ TypeId __是:com.github.wnameless.json.flattener.JsonifyLinkedHashMap
如果有人能幫助我如何將此消息返回給Java地圖,我將非常高興。
從阿爾喬姆比蘭回答後BR
更新:
我下面的代碼添加到我的配置文件:
@Bean
public SimpleRabbitListenerContainerFactory myRabbitListenerContainerFactory() {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setMessageConverter(new Jackson2JsonMessageConverter());
factory.setConnectionFactory(connectionFactory());
factory.setMaxConcurrentConsumers(5);
return factory;
}
但我仍然不知道如何獲得映射出我的消息。 新的代碼塊不會改變任何東西。
你有一個想法或代碼示例如何做到這一點。我讀了這個。但我不知道如何配置消息轉換器以確保它將返回發送的原始Map。 – user1796346
代碼更新請參閱原始文章 – user1796346
查看我答案中的更新。 –