2015-01-19 2 views
3

В приведенном ниже коде показано, как я устанавливаю заголовок и тип сообщения в сообщение AMQP.Невозможно установить заголовок для сообщения AMQP с помощью MessageProperties

MessageProperties properties = new MessageProperties(); 
    properties.setHeader("KEY", "HOUSE"); 
    properties.setContentType(MessageProperties.CONTENT_TYPE_JSON); 
Message message = new Message("1234567;Branch A;SALES;3000.50;Pending approval".getBytes(), properties); 
rabbitTemplate.sendAndReceive("", QUEUE_NAME, message); 

После отправки сообщения в очередь сообщение получено Transformer.

@Transformer(inputChannel = "inboundChannel", outputChannel = "toutboundChannel") 
public Property buildProperty(Message<String> property){ 
    LOGGER.info("message received :: HEADERS: {}, PAYLOAD :{}", property.getHeaders(), property.getPayload()); 
.... 
}  

В журналах, заголовок «KEY: HOUSE» отсутствует и даже тип сообщения не JSON и «текст/обычный» вместо этого.

LOGS: 
[SimpleAsyncTaskExecutor-1] INFO com.demo.maven.spring.integration.endpoint.TransformerRequestBuilder - message received :: HEADERS: {amqp_receivedRoutingKey=mobile.queue, amqp_deliveryTag=2, amqp_replyTo=amq.rabbitmq.reply-to.g2dkABByYWJiaXRAbG9jYWxob3N0AAAW9QAAAAAD.tTIFOS2gsM7qIlGYaybfrg==, amqp_deliveryMode=PERSISTENT, amqp_redelivered=true, id=399dda4f-4ba1-7cf4-2310-03dbfbac82b6, contentType=text/plain, timestamp=1421649922840}, PAYLOAD :1234567;Branch A;SALES;3000.50;Pending approval 

ответ

2
  1. MessagePropertiesBuilder класс для этого.

  2. По умолчанию Интеграция с пружиной Конечная точка AMQP (AmqpInboundChannelAdapter и AmqpInboundGateway) отображает только стандартные заголовки AMQP. Это поведение по умолчанию DefaultAmqpHeaderMapper. Чтобы принять любые пользовательские спецификации, вы должны ввести AmqpHeaderMapper (setHeaderMapper) в эту входящую конечную точку с опцией setRequestHeaderNames("*"). Или укажите полный список имен желаемых настраиваемых заголовков.

  3. Re. contentType=text/plain: Я думаю, что что-то между входящей конечной точкой AMQP и @Transformer(inputChannel = "inboundChannel" переопределяет полученный от AMQP contentType заголовок. Потому что RabbitTemplate этого не делает, если вы отправляете Message не любой другой объект. Пожалуйста, поделитесь DEBUG журналами для категории org.springframework.integration для приемника сообщений. Конечно, нам нужно, что часть журналов, когда вы получаете сообщение до того @Transformer

+0

Спасибо Артем Билан. Это сработало. Даже contentType показывает изменения сейчас :) Большое спасибо. –

0

Это будет работать, вы должны правильно построить messageproperties.

MessageProperties properties = new MessageProperties(); 
    properties.builder() 
    .contentType(MediaType.APPLICATION_JSON) 
    //headers here 
    .headers(Map<String, Object>) 
    .build(); 
+0

Я использую org.springframework.amqp.core.MessageProperties. В нем нет метода builder() или build(). –

+0

Если речь идет о сборке .. Я попытался код ниже, а MessagePropertiesBuilder строитель = MessagePropertiesBuilder.newInstance(); builder.setHeader ("KEY", "ДОМ"); builder.setContentType (MessageProperties.CONTENT_TYPE_JSON); Свойства MessageProperties = builder.build(); Сообщение message = new Message ("1234567; Branch A; SALES; 3000.50; В ожидании утверждения" .getBytes(), свойства); По-прежнему Тот же результат, что и выше. –

Смежные вопросы