2016-12-07 32 views
2

我已經使用Rabbit MQ發送和接收JSON消息。
我已經實現使用RabbitTemplate實例與convertAndSend方法的應用程序將消息發送到交換如下: enter image description here如何使用java發送相關性id到消息中,從發送方發送並從接收方檢索到消息頭

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? 在發送方法中,我插入了相關性。
  • Correlation Id與我插入到convertAndSend方法中的相關性數據是相同的嗎?
  • 我怎樣才能檢索到接收方法的關聯ID?

感謝

回答

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