2017-02-22 7 views
0

У меня сценарий, что поток сообщений основан на идентификаторе корреляции. Поэтому я устанавливаю строку Id корреляции в свойствах сообщения отправителя. Но я не получаю один и тот же идентификатор в сообщении получателя, приходя нулевым. Я видел, что другая опция установить одинаковый идентификатор корреляции в классе процессора сообщений, может установить сообщение. в «конвертировать и отправить». но, пожалуйста, дайте мне знать, есть ли способ получить идентификатор корреляции в простых функциях отправки и получения.messageProperties.setCorrelationIdString не работает

messProperties.setCorrelationId() устарел в последней весенней версии.

Мой отправитель:

public class Send { 

    private static ApplicationContext context = new ClassPathXmlApplicationContext("rabbitConfiguration.xml"); 
    private static RabbitTemplate template = context.getBean(RabbitTemplate.class); 

    public static void main(String[] args) { 
     MessageProperties messProperties = new MessageProperties(); 
     messProperties.setDeliveryMode(MessageDeliveryMode.PERSISTENT); 
     //messProperties.setCorrelationId("coid".getBytes()); 
     messProperties.setCorrelationIdString("dee"); 
     Message messageToSend = new Message("Message with ssl".getBytes(), messProperties); 
     template.send("message.ssl", messageToSend); 

    } 

} 

MyReceiver Код:

public class Receive { 
    private static ApplicationContext context = new ClassPathXmlApplicationContext("rabbitConfiguration.xml"); 
    private static RabbitTemplate template = context.getBean(RabbitTemplate.class); 
    public static void main(String[] args) { 

      Message recMess = template.receive("SSLQueue"); 
      String id=new String(recMess.getMessageProperties().getCorrelationId()); 
      System.out.println("the corelation id from receiver is"+id); 
      String recStr = new String(recMess.getBody()); 
      System.out.println("received message is"+recStr); 
    } 

} 

ответ

0

CorrelationId и CorrelationIdString противоречива:

В MessageProperties setCorrelationId (байт [] CorrelationId) является устаревшим.

BUT DefaultMessagePropertiesConverter по-прежнему использует (устаревшую) CorrelationIdPolicy типа BYTES.

Так что, если вы посмотрите на DefaultMessagePropertiesConverter.toMessageProperties

if (!CorrelationIdPolicy.BYTES.equals(this.correlationIdPolicy) && correlationId != null) { target.setCorrelationIdString(correlationId); }

CorrelationId не установлен ...

Я думаю, что до 2,0, единственный способ исправить это настроить ваш RabbitTemplate таким образом:

DefaultMessagePropertiesConverter messageConverter = new DefaultMessagePropertiesConverter(); 
messageConverter.setCorrelationIdAsString(DefaultMessagePropertiesConverter.CorrelationIdPolicy.STRING); 

RabbitTemplate template = new RabbitTemplate(connectionFactory); 
template.setMessagePropertiesConverter(messageConverter); 
Смежные вопросы