La conversion de Message de RabbitMQ en chaîne/json
Je suis actuellement des difficultés dur avec juste un simple problème. Je veux recevoir un message de RabbitMQ et l'ont transformé en une chaîne de caractères (ou plus tard, un objet json). Mais tout ce que je obtenir octets.
La Message objet affiche elle-même comme une chaîne de caractères de cette façon
(Body:'{"cityId":644}'; ID:null; Content:application/json; Headers:{}; Exchange:; RoutingKey:pages.type.index; Reply:null; DeliveryMode:NON_PERSISTENT; DeliveryTag:1)
La configuration de la classe (à l'aide de printemps)
@Configuration
public class RabbitConfiguration {
@Bean
public CachingConnectionFactory connectionFactory() {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory("www.example.com");
connectionFactory.setUsername("xxxx");
connectionFactory.setPassword("xxxx");
return connectionFactory;
}
@Bean
public MessageConverter jsonMessageConverter(){
JsonMessageConverter jsonMessageConverter = new JsonMessageConverter();
return jsonMessageConverter;
}
@Bean
public SimpleMessageListenerContainer messageListenerContainer(){
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory());
container.setAutoStartup(false);
container.setQueues(indexQueue());
container.setConcurrentConsumers(1);
container.setAcknowledgeMode(AcknowledgeMode.AUTO);
container.setMessageListener(new MessageListenerAdapter(pageListener(), jsonMessageConverter()));
return container;
}
@Bean
public Queue indexQueue(){
return new Queue("pages.type.index");
}
@Bean
public MessageListener pageListener(){
return new PageQueueListener();
}
}
et l'auditeur de message
public class PageQueueListener implements MessageListener {
public void onMessage(Message message) {
System.out.println(message);
System.out.println(message.getBody());
}
}
mon problème, c'est que le getBody() méthode affiche [B@4dbb73b0 donc, rien n'est jamais converti. Ni chaîne, ni à un objet json 🙁
Je me sens stupide, mais je ne peux pas trouver une solution ici
OriginalL'auteur MatthiasLaug | 2012-10-05
Vous devez vous connecter pour publier un commentaire.
message.getBody()
renvoie unebyte[]
Essayer:
Aussi, si vous regardez à l'intérieur du code source pour
org.springframework.amqp.core.Message
vous trouverez une méthode avec signatureprivate String getBodyContentAsString()
qui elle a fait comme ceci:return new String(body, ENCODING);
... donc cela devrait suffire ainsi:System.out.println(new String(message.getBody(), Charset.defaultCharset().name()))
Je suis en utilisant getBody() la méthode, mais cela découle de la mémoire exception exactement à la ligne de la nouvelle Chaîne. En fait, après un long moment de l'exécution, il échoue, mais l'exception. Avez-vous des conseils pour surmonter ce problème?
OriginalL'auteur slim