Ich versuche, eine Nachricht basierend auf einem flattern MAP mit Spring Boot und AMQP zu senden. Die Nachricht sollte dann mit @RabbitListener empfangen und an ein MAP zurück übertragen werden.Spring AMQP @RabbitListener zum Ursprungsobjekt konvertieren
Zuerst habe ich JSON-String und flach verschachtelt und senden Sie es mit dem folgenden Code:
// 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;
}
});
So weit so gut.
Auf der Empfängerseite versuche ich einen Listener zu verwenden und die Nachrichtennutzlast zurück in die Karte zu konvertieren, wie sie zuvor gesendet wurde.
Das Problem ist, dass ich keine Ahnung habe, wie es geht. erhalte ich die Nachricht mit dem folgenden Code:
@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());
}
Wie ich bereits erwähnt habe ich keine Ahnung, wie ich die Nachricht an meine alte Karte umwandeln kann. Die __ __ TypeId der Nachricht ist: com.github.wnameless.json.flattener.JsonifyLinkedHashMap
ich wäre mehr als froh, wenn mir jemand helfen könnte, wie ich diese Nachricht an eine Java-Karte zurück.
BR
Update nach Antwort von Artem Bilan:
Ich habe den folgenden Code in meine Konfigurationsdatei:
@Bean
public SimpleRabbitListenerContainerFactory myRabbitListenerContainerFactory() {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setMessageConverter(new Jackson2JsonMessageConverter());
factory.setConnectionFactory(connectionFactory());
factory.setMaxConcurrentConsumers(5);
return factory;
}
Aber ich habe noch keine Ahnung, wie man die Map out meiner Nachricht. Der neue Codeblock ändert nichts.
Hatten Sie eine Idee oder ein Codebeispiel, wie es geht. Ich habe darüber gelesen. Aber ich habe keine Ahnung, wie man den Nachrichtenkonverter konfiguriert, um sicherzustellen, dass er die ursprüngliche Karte, die gesendet wurde, zurückgibt. – user1796346
Code Update siehe ursprünglichen Beitrag – user1796346
Siehe ein Update in meiner Antwort. –