В моем проекте (spring-rabbit ..), установите фиксированную очередь ReplyTo в шаблоне, я использую метод convertSendAndReceive для RPC.
Я понимаю, что автоматически меняет значение correlationId.
Могу ли я установить correlationId перед использованием этого метода?
Вот шаблон.
@Bean
public RabbitTemplate rabbitTemplate() {
RabbitTemplate template = new RabbitTemplate(connectionFactory());
template.setMessageConverter(jsonMessageConverter());
template.setRoutingKey(AmqpConstants.JOB_QUEUE_NAME);
template.setExchange(AmqpConstants.JOB_EXCHANGE_NAME);
template.setQueue(AmqpConstants.JOB_QUEUE_NAME);
template.setReplyQueue(new Queue(AmqpConstants.JOB_REPORT_QUEUE_NAME));
template.setReplyTimeout(replyTimeoutMilliseoconds);
return template;
}
Код
jobReport = (ApiJobReport)rabbitTemplate.convertSendAndReceive(
AmqpConstants.JOB_EXCHANGE_NAME,
AmqpConstants.JOB_QUEUE_NAME,
jobMessage, new MessagePostProcessor() {
@Override
public Message postProcessMessage(Message message) throws AmqpException {
message.getMessageProperties().setCorrelationId("correlationid1234".getBytes());
return message;
}
});
В postProcessMessage установка correlationId как "correlationid1234". Но RabbitMQ Management показывает ниже.
Свойства сообщения:
correlation_id: 23316fe6-0c15-46f6-9bed-5f3abf22a594
приоритет: 0 режим_доставки: 2 заголовка:
TypeId: com.example.model.apijob content_encoding: UTF-8 content_type: application / json
Как показано в результате, набор correlationId изменен на RabbitTemplate значение messageTag (UUID). Я смотрю источник RabbitTemplate, но я не понимаю, почему он меняет значение correlationId, если correlationKey имеет значение null.
correlationId
, потому что он должен быть уникальным - поэтому он сохраняет ваш, использует свой собственный для сопоставления ответа, а затем восстанавливает вашcorrelationId
. Почему вас волнует другое значение correlationId? - person Gary Russell   schedule 01.02.2016