gpt4 book ai didi

spring-amqp - 我怎样才能得到 correlationId?

转载 作者:行者123 更新时间:2023-12-04 02:36:43 31 4
gpt4 key购买 nike

在我的项目(spring-rabbit..)中,在模板上设置固定的 ReplyTo 队列,我对 RPC 使用 convertSendAndReceive 方法。

我知道它会自动生成 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 管理显示如下。

消息属性:

correlation_id:23316fe6-0c15-46f6-9bed-5f3abf22a594

优先级:0交付模式:2 header :
TypeId:com.example.model.apijob内容编码:UTF-8内容类型:应用程序/json

如图所示,set correlationId 已更改为 RabbitTemplate messageTag value(UUID)。我正在观看 RabbitTemplate 源代码,但我不明白为什么它会在 correlationKey 为 null 时更改 correlationId。

RabbitMQ Management

最佳答案

如果您使用 sendAndReceive()(而不是 convertSendAndReceive());如果您设置了 correlationId 消息属性,模板会将其保存;在出站消息中使用自己的correlationId,并在回复消息中恢复原来的correlationId。

convertSendAndReceive() 的上下文中你的意思不清楚;您不能在调用之前设置 correlationId,因为在转换发生之前没有消息。

您可以在 MessagePostProcessor 中设置它,但它的作用不大。

也许如果你能解释你正在尝试做什么,我可以提出一些其他建议。

关于spring-amqp - 我怎样才能得到 correlationId?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35053098/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com