Reputation: 822
I have some properties that I would like to read from previously set message headers. I did this:
Delivery delivery = consumer.nextDelivery();
Map<String, Object> headers = delivery.getProperties().getHeaders();
Problem is, headers have weird types - like LongString for example. Is there any helper class that would allow me to easily convert headers to anything more useful?
Upvotes: 6
Views: 10890
Reputation: 1
I apologize for the necroposting, but I was looking for an answer to a similar question and this works for me personally:
Object o = event.getProperties().getHeaders().get("stringHeader");
String stringHeader;
if(Objects.nonNull(o)){
stringHeader = o.toString();
}else {
stringHeader = "";
}
...some stringHeader usege
Upvotes: 0
Reputation: 1249
I just cast to LongString and the convert toString()
String header = "foo";
String value = ((LongString) message.getProps().getHeaders().get(header)).toString();
Upvotes: 1
Reputation: 7331
That's how I've been able to do it, I am casting to LongString and then convert to String :
protected String extractCorrelationIdFromHeaders(AMQP.BasicProperties properties) throws UnsupportedEncodingException {
String decodedCorrelationId=null;
if(properties.getHeaders() != null) {
try {
Object rawCorrelationId = properties.getHeaders().get(CORRELATION_ID_KEY);
if(rawCorrelationId==null){
log.info("no correlationId provided in headers");
return null;
}
byte[] correlationIdAsByteArray = ((LongString) rawCorrelationId).getBytes();
decodedCorrelationId = new String(correlationIdAsByteArray, "UTF-8");
}
catch(UnsupportedEncodingException e){
log.warn("extracted correlationId, but unable to decode it",e);
}
}
return decodedCorrelationId;
}
Strangely enough, I feel it's not very well documented out there. Hope this helps !
Upvotes: 3
Reputation: 1903
You must put Headers in your Message:
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);
For read the headers of Message inbound from Rabbit Queue:
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());
}
}
}
Upvotes: 4