2017-02-22 8 views
0

メッセージフローが相関IDに基づいているというシナリオがあります。だから私は送信者のメッセージのプロパティで相関Idの文字列を設定しています。しかし、私は受信者のメッセージに同じIDを受け取っていません。メッセージプロセッサクラスで同じ相関IDを設定する他のオプションを見てきましたが、メッセージを設定できます。 「変換して送信」で簡単な送受信機能で相関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には)は推奨されません。

ただし、DefaultMessagePropertiesConverterでは引き続きBYTES型の(廃止予定の)CorrelationIdPolicyが使用されます。

だから、あなたはDefaultMessagePropertiesConverter.toMessageProperties見れば

CorrelationIDが設定されていない

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

...

私は2.0の前に、この問題を解決する唯一の方法は構成することであると思いますあなたのこのようにしてRabbitTemplate:

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

RabbitTemplate template = new RabbitTemplate(connectionFactory); 
template.setMessagePropertiesConverter(messageConverter); 
関連する問題