spring amqp 消息 CorrelationIdString 为空
spring amqp message CorrelationIdString is null
像下面的代码我发送一条消息并设置它 messageid 和 CorrelationIdString
rabbitTemplate.send(RabbitMQConfig.EXCHANGE_NAME, "aaa.orange.bbb",new Message(messageBody, MessagePropertiesBuilder.newInstance().setCorrelationIdString(uuid3).
setMessageId(uuid3).setContentType("text/x-json").build()),
new CorrelationData(uuid3)
);
和接收者代码
public void processMessage (Message msg) throws Exception {
// Thread.sleep(100000);
System.out.println("Receiver1 got message" + msg);
和日志
Receiver1 got message(Body:'hello,world1 2' MessageProperties [headers={spring_listener_return_correlation=93fbcc71-b0eb-4d33-a187-d4b27122a663}, timestamp=null, messageId=5f779051-12c5-43f1-a589-6d14430d3a52, userId=null, receivedUserId=null, appId=null, clusterId=null, type=null, correlationId=null, correlationIdString=null, replyTo=null, contentType=text/x-json, contentEncoding=null, contentLength=0, deliveryMode=null, receivedDeliveryMode=PERSISTENT, expiration=null, priority=0, redelivered=false, receivedExchange=first_exchange, receivedRoutingKey=aaa.orange.bbb, receivedDelay=null, deliveryTag=1, messageCount=0, consumerTag=amq.ctag-JbtjvUYYqlWOIsgKkOe-8A, consumerQueue=queue_a])
我的问题是为什么 CorrelationIdString 为空是不是有问题
我们在 1.6 和 1.7 中从 correlationId 的 byte[]
迁移到 String
,但为了向后兼容,我们必须默认使用 byte[]
;迁移已在 2.0(当前为 2.0.2)中完成并且 correlationIdString
不再是 属性.
我建议升级到 2.0。
或者,如果您必须使用旧版本,请参阅 CorrelationIdPolicy
here 从 byte[]
切换到 String
或 BOTH
。
对我来说,我被迫覆盖 createContainerInstance 方法来更改侦听器端的策略。
final DefaultMessagePropertiesConverter messagePropertiesConverter = new DefaultMessagePropertiesConverter();
messagePropertiesConverter.setCorrelationIdPolicy(DefaultMessagePropertiesConverter.CorrelationIdPolicy.STRING);
return new SimpleRabbitListenerContainerFactory() {
@Override
protected SimpleMessageListenerContainer createContainerInstance() {
final SimpleMessageListenerContainer result = new SimpleMessageListenerContainer();
result.setMessagePropertiesConverter(messagePropertiesConverter);
return result;
}
};
像下面的代码我发送一条消息并设置它 messageid 和 CorrelationIdString
rabbitTemplate.send(RabbitMQConfig.EXCHANGE_NAME, "aaa.orange.bbb",new Message(messageBody, MessagePropertiesBuilder.newInstance().setCorrelationIdString(uuid3).
setMessageId(uuid3).setContentType("text/x-json").build()),
new CorrelationData(uuid3)
);
和接收者代码
public void processMessage (Message msg) throws Exception {
// Thread.sleep(100000);
System.out.println("Receiver1 got message" + msg);
和日志
Receiver1 got message(Body:'hello,world1 2' MessageProperties [headers={spring_listener_return_correlation=93fbcc71-b0eb-4d33-a187-d4b27122a663}, timestamp=null, messageId=5f779051-12c5-43f1-a589-6d14430d3a52, userId=null, receivedUserId=null, appId=null, clusterId=null, type=null, correlationId=null, correlationIdString=null, replyTo=null, contentType=text/x-json, contentEncoding=null, contentLength=0, deliveryMode=null, receivedDeliveryMode=PERSISTENT, expiration=null, priority=0, redelivered=false, receivedExchange=first_exchange, receivedRoutingKey=aaa.orange.bbb, receivedDelay=null, deliveryTag=1, messageCount=0, consumerTag=amq.ctag-JbtjvUYYqlWOIsgKkOe-8A, consumerQueue=queue_a])
我的问题是为什么 CorrelationIdString 为空是不是有问题
我们在 1.6 和 1.7 中从 correlationId 的 byte[]
迁移到 String
,但为了向后兼容,我们必须默认使用 byte[]
;迁移已在 2.0(当前为 2.0.2)中完成并且 correlationIdString
不再是 属性.
我建议升级到 2.0。
或者,如果您必须使用旧版本,请参阅 CorrelationIdPolicy
here 从 byte[]
切换到 String
或 BOTH
。
对我来说,我被迫覆盖 createContainerInstance 方法来更改侦听器端的策略。
final DefaultMessagePropertiesConverter messagePropertiesConverter = new DefaultMessagePropertiesConverter();
messagePropertiesConverter.setCorrelationIdPolicy(DefaultMessagePropertiesConverter.CorrelationIdPolicy.STRING);
return new SimpleRabbitListenerContainerFactory() {
@Override
protected SimpleMessageListenerContainer createContainerInstance() {
final SimpleMessageListenerContainer result = new SimpleMessageListenerContainer();
result.setMessagePropertiesConverter(messagePropertiesConverter);
return result;
}
};