У меня есть Java-код, подобный этому, в классе под названием «MyService» для получения сообщений, обработки переданного объекта и возврата ответа с намерением получить ответ с использованием настроенного ключа обмена и маршрутизации, как указано с помощью@ Отправка аннотации:
@RabbitListener(containerFactory = "myContainerFactory", queues = RabbitConfig.MY_QUEUE_NAME)
@SendTo("#{T(com.acme.config.RabbitOutboundConfig).OUTBOUND_EXCHANGE_NAME + '/' + myService.getRoutingKey()}")
public OrderResponse handlePaidOrder(Order order) {
// do processing on the input Order object here...
OrderResponse orderResponse = new OrderResponse();
// fill up response object here
return orderResponse;
}
public String getRoutingKey() {
String routingKey;
// .. custom logic to build a routing key
return routingKey;
}
Это имеет смысл и прекрасно работает.Проблема, с которой я столкнулся, заключается в том, что я не могу понять, как предотвратить появление свойства «reply_to» в сообщении.Я знаю, если мой отправитель конфигурирует шаблон RabbitTemplate, вызывая setReplyAddress, это приведет к появлению свойства reply_to и correlation_id в сообщении.
Однако, если я просто не вызываю setReplyAddress, я все равно получаю свойство reply_to, одноэто выглядит так:
reply_to: amq.rabbitmq.reply-to.g2dkAAxyYWJiaXRAd3NK и т. д.
, и с этим reply_to в сообщении @SendTo не имеет никакого эффекта.Документы Spring AMQP и это сообщение: Динамическая аннотация SendTo состояние:
@SendTo используется только в том случае, если в сообщении нет replyTo.
* 1017Кроме того, когда я не вызываю setReplyAddress на RabbitTemplate, я также не получаю идентификатор корреляции.Я уверен, что мне это понадобится.Итак, мой вопрос в том, как заставить моего отправителя сгенерировать идентификатор корреляции, но не генерировать ответ, чтобы мой получатель мог использовать аннотацию @SendTo?
Заранее большое спасибо.