2016-12-07 2 views
2

Я использовал Rabbit MQ для отправки и получения сообщения JSON.
я реализовал приложение, используя экземпляр RabbitTemplate с помощью метода convertAndSend, чтобы отправить сообщение с обменом, как показано ниже: enter image description hereКак отправить идентификатор корреляции, в сообщение, отправителя и извлечения из заголовка сообщения с помощью Rabbit MQ по java

rabbitTemplate.convertAndSend(exchangeNameOut, message.getString(PERSISTENCE_MESSAGE_ROUTING_KEY), 
        message.getString(PERSISTENCE_MESSAGE_BODY), new CorrelationData(""+analyticRuntime.getId())); 

В то время как для поиска информации сообщения, на сторону приемника, я реализовал последовавшей метод:

 @RabbitListener(queues = "${rabbit.queue.mail.name}",containerFactory = "rabbitListenerContainerFactory") 
    public void processMailMessage(Message message) { 
     log.info("ENTER [processMailMessage] "); 

     Mail mail; 

      JSONObject messageBody = new JSONObject(new String(message.getBody())); 

      String asset = "" + messageBody.get(Constants.PERSISTENCE_MESSAGE_ASSET_ID_KEY); 

      String body = "" + messageBody.get(Constants.PERSISTENCE_MESSAGE_EVENT_KEY); 

      String alarms = ""; 
      log.info("[processMailMessage] message.getMessageProperties().getCorrelationId() : " + message.getMessageProperties().getCorrelationId()"; 
} 

Возникает вопрос:

  • Почему message.getMe ssageProperties(). getCorrelationId() - NULL? В метод отправки я вставил корреляцию.
  • Идентификатор корреляции - это то же самое, что и данные корреляции, которые я ввел в метод convertAndSend?
  • Как я могу найти идентификатор корреляции в приемнике?

Благодаря

ответ

3

Нет; данные корреляции предназначены для корреляции издателя, подтверждающего отправку; это не имеет никакого отношения к свойству корреляции Id.

Используйте MessagePostProcessor:

rabbitTemplate.convertAndSend(exchangeNameOut, message.getString(PERSISTENCE_MESSAGE_ROUTING_KEY), 
       message.getString(PERSISTENCE_MESSAGE_BODY), 
    m -> { 
     m.getMessageProperties().setCorrelationIdString(""+analyticRuntime.getId()); 
     return m; 
    }); 

Если вы не используете Java8, используйте new MessagePostProcessor() { ... }

+0

это работает, спасибо – Stefano