Преобразование сообщения из RabbitMQ в строку /json
В настоящее время я борюсь с довольно простой проблемой. Я хочу получить сообщение от RabbitMQ и преобразовать его в строку (или позже в объект json). Но все, что я получаю, это байты.
Объект Message отображает себя как строку таким образом
(Body:'{"cityId":644}'; ID:null; Content:application/json; Headers:{}; Exchange:; RoutingKey:pages.type.index; Reply:null; DeliveryMode:NON_PERSISTENT; DeliveryTag:1)
Класс конфигурации (с помощью пружины)
@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();
}
}
и слушатель сообщения
public class PageQueueListener implements MessageListener {
public void onMessage(Message message) {
System.out.println(message);
System.out.println(message.getBody());
}
}
Моя проблема в том, что метод getBody() отображает [B@4dbb73b0, поэтому ничего не конвертируется. Ни к строке, ни к объекту json:(
Я чувствую себя глупо, но я не могу найти решение здесь
1 ответ
message.getBody()
возвращает byte[]
Пытаться:
byte[] body = message.getBody();
System.out.println(new String(body));
Если вы хотите выполнить синтаксический разбор в JSONObject, лучший способ - добавить сообщение RabbitMQ в StringBuilder в формате String. Затем проанализируйте StringBuilder в JSONObject, используя любую из утилит преобразования.
Например:
StringBuilder sb = new StringBuilder();
sb.append(publisher.toString());
payload = (JSONObject)jsonParser.parse(sb.toString());