Spring integration amqp出站通道适配器的amqp模板如何可选

Spring integration amqp出站通道适配器的amqp模板如何可选,spring-integration,spring-amqp,Spring Integration,Spring Amqp,当我浏览SpringIntegration的出站通道适配器的文档时,我发现amqp模板是一个可选字段。我还注意到,exchange名称和路由密钥同时出现在Rabbit模板和出站通道适配器上 如果我没有提供amqp模板,适配器将在连接工厂中使用什么 及 如果我在兔子模板中指定了一组属性,在出站通道适配器中指定了另一组属性,然后将兔子模板提供给出站通道适配器,那么将使用哪些属性?并不是说我会这么做,我只是好奇哪个组件的属性比另一个组件的属性更有用 如果我没有提供amqp模板,适配器将在连接工厂中使用

当我浏览SpringIntegration的出站通道适配器的文档时,我发现amqp模板是一个可选字段。我还注意到,exchange名称和路由密钥同时出现在Rabbit模板和出站通道适配器上

如果我没有提供amqp模板,适配器将在连接工厂中使用什么

如果我在兔子模板中指定了一组属性,在出站通道适配器中指定了另一组属性,然后将兔子模板提供给出站通道适配器,那么将使用哪些属性?并不是说我会这么做,我只是好奇哪个组件的属性比另一个组件的属性更有用

如果我没有提供amqp模板,适配器将在连接工厂中使用什么

它需要来自bean名称为amqpTemplate AmqpOutboundChannelAdapterParser的上下文:

exchange和routingKey等属性用于每个MessageAmQOutboundEndpoint:

ConfirmCallback和ReturnCallback是从AMQOutboundEndpoint为该AmqpTemplate配置的。但是在这种情况下,您不能使用共享bean,必须提供单独的bean


必须在该bean定义上提供所有其他RabbitTemplate特定选项。而且没有它们。

对;对于模板,exchange和RK是用于简单方法调用的默认值;适配器使用采用动态exchange和RK的方法调用,允许使用单个适配器向不同的exchange/队列发送消息。当然,您可以与其他组件共享模板,这些组件可以免费使用简单的发送方法。抱歉,仍然有点困惑。我有一个简单的应用程序,它接收消息并将它们发送到一个标头enricher,该标头enricher将RoutingKey标头放在上面。然后,我有一个出站通道适配器,其路由键表达式=headers['RoutingKey'],并在适配器e.exchange.1上声明了交换。我还有一个兔子模板id=rabbitTemplate,它还指定了一个exchangee.exchange.2。如果我在exchange将用于发送消息的出站通道适配器上设置template=rabbitTemplate?我刚刚阅读了Github上的amqOutboundEndpoint.java,它似乎忽略了模板上预定义的exchange和路由密钥设置,并将int-amqp:outbound通道适配器上定义的设置用作据我所知。
String amqpTemplateRef = element.getAttribute("amqp-template");
if (!StringUtils.hasText(amqpTemplateRef)) {
    amqpTemplateRef = "amqpTemplate";
this.amqpTemplate.convertAndSend(exchangeName, routingKey, requestMessage.getPayload(),