9

私は現在、かなり単純な問題に苦労しています。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オブジェクトにも:(

私はばかげているように感じますが、ここで解決策を見つけることができません

4

2 に答える 2

20

message.getBody()を返しますbyte[]

試す:

byte[] body = message.getBody();
System.out.println(new String(body));
于 2012-10-05T14:25:47.133 に答える
1

JSONObject に解析する場合、最善の方法は、RabbitMQ メッセージを String 形式の StringBuilder に追加することです。次に、任意の変換ユーティリティを使用して、StringBuilder を JSONObject に解析します。
例:

StringBuilder sb = new StringBuilder();
sb.append(publisher.toString());
payload = (JSONObject)jsonParser.parse(sb.toString());
于 2020-02-23T09:12:20.753 に答える