我目前正在努力解决一个相对简单的问题。我想从RabbitMQ接收一条消息,并将其转换为字符串(或稍后转换为JSON对象)。但是我得到的都是字节。
Message对象以这种方式显示为字符串
(Body:'{"cityId":644}'; ID:null; Content:application/json; Headers:{}; Exchange:; RoutingKey:pages.type.index; Reply:null; DeliveryMode:NON_PERSISTENT; DeliveryTag:1)
配置类(使用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();
}
}
以及消息监听器
public class PageQueueListener implements MessageListener {
public void onMessage(Message message) {
System.out.println(message);
System.out.println(message.getBody());
}
}
我的问题是,getBody() 方法显示为 [B@4dbb73b0,所以没有任何转换。无论是字符串还是JSON对象都没有转换成功 :(
我感到很愚蠢,但我找不到解决方法
org.springframework.amqp.core.Message
的源代码,您会发现一个方法名为private String getBodyContentAsString()
,它是这样实现的:return new String(body, ENCODING);
... 因此,这种写法也应该可以:System.out.println(new String(message.getBody(), Charset.defaultCharset().name()))
。 - pulkitsinghal