获取rabbitmq消息的正文部分

时间:2018-11-01 11:27:43

标签: java rabbitmq spring-amqp

我为Rabbit mq设置了一个简单的侦听器

@RabbitListener(queues = SECOND_QUEUE)
    public void onMessage(Message message) {
     LOGGER.info("second queue listener.........");
     LOGGER.info(message.toString());
    }

这给出了这种格式的消息

 (Body:'1460' MessageProperties [headers={}, timestamp=null, messageId=null, userId=null, receivedUserId=null, appId=null, clusterId=null, type=null, correlationId=null, correlationIdString=null, replyTo=null, contentType=application/x-java-serialized-object, contentEncoding=null, contentLength=0, deliveryMode=null, receivedDeliveryMode=PERSISTENT, expiration=null, priority=0, redelivered=false, receivedExchange=, receivedRoutingKey=bottomlesspit, receivedDelay=null, deliveryTag=1, messageCount=0, consumerTag=amq.ctag-PpEjG_BokAg-A4wllCgeqA, consumerQueue=bottomlesspit])

在控制台上。

我也有兴趣在客户端处理消息,我有这个

var onConnect = function() {
   client.subscribe("/topic/messages", function(d) {
   var str = d.body
   var res = str.match(/Body:\'(.+)\'/);
   console.log("I control this",res[1]);
   });
 };

我只想在Java中获取主体,因为它是我目前唯一感兴趣的部分。

是否已经在Java和stomp上实现了仅用于获取主体部分的功能?

3 个答案:

答案 0 :(得分:2)

message.getBody()是您所需要的-它会返回byte[],您需要在知道所用消息格式的情况下进行转换:

@RabbitListener(queues = SECOND_QUEUE)
public void onMessage(Message message) {
    byte[] body = message.getBody();
    // do what you need with the body
}

答案 1 :(得分:0)

按照@syntagma的建议,这对我有用

@RabbitListener(queues = SECOND_QUEUE)
public void onMessage(Message message) {
 LOGGER.info("second queue listener.........");
 //LOGGER.info(message.toString());
 byte[] body = message.getBody();
LOGGER.info("This was the output from the listener "+new String(body));
}

答案 2 :(得分:0)

您可以像这样获取数据:

@Override
    public void onMessage(Message message, byte[] pattern) {
        yourmap.put("data", message);
        send();
    }

然后

String s = yourmap.get("data").toString();

您可以从流中获取发布的数据。

我希望这会有所帮助。