как я могу получить correlationId?

В моем проекте (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.

Управление RabbitMQ


person 배대현    schedule 28.01.2016    source источник
comment
correlationId? Где это находится? Где твой код?   -  person bozzmob    schedule 28.01.2016
comment
Как я сказал в своем ответе ниже, шаблон не полагается на предоставленный пользователем correlationId, потому что он должен быть уникальным - поэтому он сохраняет ваш, использует свой собственный для сопоставления ответа, а затем восстанавливает ваш correlationId. Почему вас волнует другое значение correlationId?   -  person Gary Russell    schedule 01.02.2016


Ответы (1)


Если вы используете sendAndReceive() (а не convertSendAndReceive()); если вы установите свойство сообщения correlationId, шаблон сохранит его; использует свой собственный correlationId в исходящем сообщении и восстанавливает исходный correlationId в ответном сообщении.

Непонятно, что вы имеете в виду в контексте convertSendAndReceive(); вы не можете установить correlationId перед его вызовом, потому что нет сообщения, пока не произойдет преобразование.

Вы можете установить его в MessagePostProcessor, но это не даст многого.

Возможно, если бы вы могли объяснить, что вы пытаетесь сделать, я могу сделать другое предложение.

person Gary Russell    schedule 28.01.2016
comment
Спасибо за Ваш ответ. Просто мне было любопытно, как производитель может сохранить свой correlationId в db. В моем проекте может потребоваться, чтобы другой производитель ответил в очередь, а не Потребитель. Нет проблем, если потребитель сохранит correlationId. Ваш ответ очень полезен. - person 배대현; 02.02.2016