入站閘道器

入站閘道器支援入站通道介面卡的所有屬性(除了 'channel' 被 'request-channel' 替換之外),還支援一些附加屬性。以下列表顯示了可用屬性

  • Java DSL

  • Java

  • XML

@Bean // return the upper-cased payload
public IntegrationFlow amqpInboundGateway(ConnectionFactory connectionFactory) {
    return IntegrationFlow.from(Amqp.inboundGateway(connectionFactory, "foo"))
            .transform(String.class, String::toUpperCase)
            .get();
}
@Bean
public MessageChannel amqpInputChannel() {
    return new DirectChannel();
}

@Bean
public AmqpInboundGateway inbound(SimpleMessageListenerContainer listenerContainer,
        @Qualifier("amqpInputChannel") MessageChannel channel) {
    AmqpInboundGateway gateway = new AmqpInboundGateway(listenerContainer);
    gateway.setRequestChannel(channel);
    gateway.setDefaultReplyTo("bar");
    return gateway;
}

@Bean
public SimpleMessageListenerContainer container(ConnectionFactory connectionFactory) {
    SimpleMessageListenerContainer container =
                    new SimpleMessageListenerContainer(connectionFactory);
    container.setQueueNames("foo");
    container.setConcurrentConsumers(2);
    // ...
    return container;
}

@Bean
@ServiceActivator(inputChannel = "amqpInputChannel")
public MessageHandler handler() {
    return new AbstractReplyProducingMessageHandler() {

        @Override
        protected Object handleRequestMessage(Message<?> requestMessage) {
            return "reply to " + requestMessage.getPayload();
        }

    };
}
<int-amqp:inbound-gateway
                          id="inboundGateway"                (1)
                          request-channel="myRequestChannel" (2)
                          header-mapper=""                   (3)
                          mapped-request-headers=""          (4)
                          mapped-reply-headers=""            (5)
                          reply-channel="myReplyChannel"     (6)
                          reply-timeout="1000"               (7)
                          amqp-template=""                   (8)
                          default-reply-to="" />             (9)
1 此介面卡的唯一 ID。可選。
2 轉換後的訊息傳送到的訊息通道。必需。
3 接收 AMQP 訊息時使用的 AmqpHeaderMapper 引用。可選。預設情況下,只有標準 AMQP 屬性(如 contentType)會被複制到 Spring Integration 的 MessageHeaders 中以及從其中複製。預設的 DefaultAmqpHeaderMapper 不會將 AMQP MessageProperties 中的任何使用者自定義頭複製到 AMQP 訊息或從中複製。如果提供了 'request-header-names' 或 'reply-header-names',則不允許此屬性。
4 要從 AMQP 請求對映到 MessageHeaders 的 AMQP 頭名稱的逗號分隔列表。僅在未提供 'header-mapper' 引用時才能提供此屬性。此列表中的值也可以是與頭名稱匹配的簡單模式(例如 "*""thing1*, thing2""*thing1")。
5 要對映到 AMQP 回覆訊息的 AMQP 訊息屬性中的 MessageHeaders 名稱的逗號分隔列表。所有標準頭(如 contentType)都對映到 AMQP Message Properties,而使用者定義的頭則對映到 'headers' 屬性。僅在未提供 'header-mapper' 引用時才能提供此屬性。此列表中的值也可以是與頭名稱匹配的簡單模式(例如 "*""foo*, bar""*foo")。
6 期望回覆訊息的訊息通道。可選。
7 設定底層 o.s.i.core.MessagingTemplate 用於從回覆通道接收訊息的 receiveTimeout。如果未指定,此屬性預設為 1000(1 秒)。僅當容器執行緒在傳送回覆之前將任務交給另一個執行緒時適用。
8 定製的 AmqpTemplate bean 引用(用於更好地控制要傳送的回覆訊息)。您可以提供 RabbitTemplate 的替代實現。
9 requestMessage 沒有 replyTo 屬性時使用的 replyTo o.s.amqp.core.Address。如果未指定此選項,並且未提供 amqp-template,請求訊息中也不存在 replyTo 屬性,則會丟擲 IllegalStateException,因為無法路由回覆。如果未指定此選項但提供了外部的 amqp-template,則不會丟擲異常。如果您預計到請求訊息中沒有 replyTo 屬性的情況,則必須指定此選項或在該模板上配置預設的 exchangeroutingKey

請參閱入站通道介面卡中關於配置 listener-container 屬性的注意事項。

從版本 5.5 開始,AmqpInboundChannelAdapter 可以配置一個 org.springframework.amqp.rabbit.retry.MessageRecoverer 策略,該策略在內部呼叫重試操作時用於 RecoveryCallback。有關更多資訊,請參閱 setMessageRecoverer() 的 JavaDocs。

批次訊息

請參閱批次訊息