如何在 Java 中读取 RabbitMQ 中的标头?

kor*_*rda 6 java rabbitmq

我有一些我想从以前设置的消息头中读取的属性。我这样做了:

 Delivery delivery = consumer.nextDelivery();
 Map<String, Object> headers = delivery.getProperties().getHeaders();
Run Code Online (Sandbox Code Playgroud)

问题是,标题有奇怪的类型 - 例如 LongString。是否有任何帮助类可以让我轻松地将标题转换为更有用的东西?

dmo*_*tta 4

您必须在消息中添加标头:

MessageProperties props = MessagePropertiesBuilder.newInstance().setContentType(MessageProperties.CONTENT_TYPE_JSON).build();
props.setHeader("headerKey1", "headerValue1");

Message msg = new Message("{'body':'value1','body2':value2}".getBytes(), props);        

rabbitTemplate.send("exchange.direct.one", new String(), msg);
Run Code Online (Sandbox Code Playgroud)

要读取从 Rabbit 队列入站的消息的标头:

import org.springframework.amqp.core.Message;
    import org.springframework.amqp.core.MessageListener;

    public class MessagesHandler implements MessageListener {

        public void onMessage(Message message) {
            Map<String, Object> headers = message.getMessageProperties().getHeaders();
            for (Map.Entry<String, Object> header : headers.entrySet())
            {
                System.out.println(header.getKey() + " : " + header.getValue());
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)