【问题标题】:How is the amqp-template optional for an amqp outbound channel adapteramqp 出站通道适配器的 amqp 模板如何可选
【发布时间】:2015-02-20 17:08:24
【问题描述】:

当我查看有关 spring 集成的出站通道适配器的文档时,我看到 amqp-template 是一个可选字段。我还注意到,交换名称和路由键同时出现在 Rabbit 模板和出站通道适配器上。

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

如果我在 rabbit 模板中指定了一组属性,在出站通道适配器中指定了另一组属性,然后将 rabbit 模板提供给出站通道适配器,将使用哪些属性? (并不是说我会这样做,我只是好奇哪个组件的属性被另一个使用)

【问题讨论】:

    标签: spring-integration spring-amqp


    【解决方案1】:

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

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

    String amqpTemplateRef = element.getAttribute("amqp-template");
    if (!StringUtils.hasText(amqpTemplateRef)) {
        amqpTemplateRef = "amqpTemplate";
    

    exchangeroutingKey 等属性用于每个 message(AmqpOutboundEndpoint):

    this.amqpTemplate.convertAndSend(exchangeName, routingKey, requestMessage.getPayload(),
    

    ConfirmCallbackReturnCallback 配置为来自 AmqpOutboundEndpointAmqpTemplate。但是在这种情况下,您不能使用共享 bean,而必须提供单独的。

    必须在该 bean 定义上提供所有其他 RabbitTemplate 特定选项。而<int-amqp:outbound-channel-adapter> 没有。

    【讨论】:

    • 对;使用模板,exchange 和 RK 是用于简单方法调用的默认值;适配器使用采用(动态)交换和 RK 的方法调用,允许使用单个适配器将消息发送到不同的交换/队列。当然,您可以将模板与其他组件共享,这些组件可以免费使用简单的发送方法。
    • 抱歉,还是有点糊涂。我有一个简单的应用程序,它接收消息并将它们发送到在其上放置“RoutingKey”标头的标头丰富器。然后我有一个带有 routing-key-expression="headers['RoutingKey']" 的出站通道适配器和在该适配器上声明的交换(e.exchange.1)。我还有一个兔子模板 (id="rabbitTemplate),它还指定了一个交换 (e.exchange.2)。如果我在出站通道适配器上设置模板 =“rabbitTemplate”,交换将用于发送留言?
    • 我刚刚阅读了 Github 上的 AmqpOutboundEndpoint.java,它似乎忽略了模板上预定义的交换和路由密钥设置,并使用了 int-amqp:outbound-channel 上定义的设置-适配器(据我所知)。
    猜你喜欢
    • 2014-06-29
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 2019-06-06
    • 2018-04-10
    • 2019-10-22
    • 2020-12-26
    • 1970-01-01
    相关资源
    最近更新 更多