Konvertieren von Nachricht von RabbitMQ in string/json
Ich bin derzeit kämpfen hart mit einem fairen einfaches problem. Ich möchte eine Nachricht erhalten, die von RabbitMQ und haben, umgewandelt in einen string (oder später ein json-Objekt). Aber alles was ich bekomme ist Byte.
Den Nachricht Objekt zeigt sich als ein string, der Weg
(Body:'{"cityId":644}'; ID:null; Content:application/json; Headers:{}; Exchange:; RoutingKey:pages.type.index; Reply:null; DeliveryMode:NON_PERSISTENT; DeliveryTag:1)
Die configuration-Klasse (mit spring)
@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();
}
}
und die message-listener -
public class PageQueueListener implements MessageListener {
public void onMessage(Message message) {
System.out.println(message);
System.out.println(message.getBody());
}
}
mein problem ist, dass die getBody() Methode zeigt [B@4dbb73b0 so nichts ist für immer bekehrt. Weder ein string noch um ein json-Objekt 🙁
Fühle ich mich dumm, aber ich finde keine Lösung hier
InformationsquelleAutor MatthiasLaug | 2012-10-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
message.getBody()
gibt einebyte[]
Versuchen:
Auch wenn man sich im source-code für
org.springframework.amqp.core.Message
finden Sie eine Methode mit der Signaturprivate String getBodyContentAsString()
was macht es so:return new String(body, ENCODING);
... also das sollte reichen:System.out.println(new String(message.getBody(), Charset.defaultCharset().name()))
Ich bin mit getBody () - Methode, aber es führt zu out of memory-Ausnahme genau auf der Linie der neuen String. Tatsächlich, nach einer langen Zeit läuft, versäumt es aber die Ausnahme. Haben Sie irgendwelche Tipps um dieses problem zu überwinden?
InformationsquelleAutor slim