我在一个名为“MyService”的类中有与此类似的 Java 代码,用于接收消息、处理传递的对象并返回响应,目的是使用配置的交换和路由键返回响应,如使用 @SendTo 注释指定:
@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”属性进入消息。我知道我的发件人是否通过调用 setReplyAddress 来配置 RabbitTemplate,这将在消息中产生一个 reply_to 属性和一个 correlation_id。
但是,如果我只是不调用 setReplyAddress,我仍然会得到一个 reply_to 属性,它看起来像这样:
reply_to: amq.rabbitmq.reply-to.g2dkAAxyYWJiaXRAd3NK 等等
并且在消息中使用该 reply_to 时,@SendTo 无效。Spring AMQP 文档和这篇文章: Dynamic SendTo annotation state:
@SendTo 仅在消息中没有回复时使用。
此外,当我不在 RabbitTemplate 上调用 setReplyAddress 时,我也没有得到相关 ID。我很确定我会需要那个。所以,我的问题是,如何让我的发件人生成相关 ID 但不生成回复,以便我的收件人可以使用 @SendTo 注释?
提前非常感谢。