入站网关

入站网关支持入站通道适配器上的所有属性(但“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"                [id="CO1-1"]1
                          request-channel="myRequestChannel" [id="CO1-2"]2
                          header-mapper=""                   [id="CO1-3"]3
                          mapped-request-headers=""          [id="CO1-4"]4
                          mapped-reply-headers=""            [id="CO1-5"]5
                          reply-channel="myReplyChannel"     [id="CO1-6"]6
                          reply-timeout="1000"               [id="CO1-7"]7
                          amqp-template=""                   [id="CO1-8"]8
                          default-reply-to="" />             [id="CO1-9"]9
 <1>  此适配器的唯一 ID。
可选。
 <1>  转换后的消息将发送到的消息通道。
必填。
 <1>  对 `AmqpHeaderMapper` 的引用,用于接收 AMQP 消息。
可选。
默认情况下,只有标准 AMQP 属性(如 `contentType`)会被复制到 Spring Integration `MessageHeaders` 中,或从其中复制。
默认的 `DefaultAmqpHeaderMapper` 不会将 AMQP `MessageProperties` 中的任何用户定义头复制到 AMQP 消息中,或从其中复制。
如果提供了“request-header-names”或“reply-header-names”,则不允许使用此项。
 <1>  逗号分隔的 AMQP 头名称列表,用于将 AMQP 请求中的头映射到 `MessageHeaders` 中。
此属性仅在未提供“header-mapper”引用时才能提供。
此列表中的值也可以是与头名称匹配的简单模式(例如 `"*"` 或 `"thing1*, thing2"` 或 `"*thing1"`)。
 <1>  逗号分隔的 `MessageHeaders` 名称列表,用于映射到 AMQP 回复消息的 AMQP 消息属性中。
所有标准头(如 `contentType`)都映射到 AMQP 消息属性,而用户定义的头则映射到“headers”属性。
此属性仅在未提供“header-mapper”引用时才能提供。
此列表中的值也可以是与头名称匹配的简单模式(例如 `"*"` 或 `"foo*, bar"` 或 `"*foo"`)。
 <1>  期望回复消息的消息通道。
可选。
 <1>  设置底层 `o.s.i.core.MessagingTemplate` 的 `receiveTimeout`,用于从回复通道接收消息。
如果未指定,此属性默认为 `1000`(1 秒)。
仅当容器线程在发送回复之前将任务移交给另一个线程时才适用。
 <1>  自定义的 `AmqpTemplate` bean 引用(以便更好地控制要发送的回复消息)。
您可以提供 `RabbitTemplate` 的替代实现。
 <1>  当 `requestMessage` 没有 `replyTo` 属性时使用的 `replyTo` `o.s.amqp.core.Address`。
如果未指定此选项,未提供 `amqp-template`,请求消息中不存在 `replyTo` 属性,则会抛出 `IllegalStateException`,因为无法路由回复。
如果未指定此选项但提供了外部 `amqp-template`,则不会抛出异常。
如果预见到请求消息中不存在 `replyTo` 属性的情况,您必须指定此选项,或者在该模板上配置默认的 `exchange` 和 `routingKey`。
请参阅 xref:amqp/inbound-channel-adapter.adoc[入站通道适配器] 中关于配置 `listener-container` 属性的说明。
从 5.5 版本开始,`AmqpInboundChannelAdapter` 可以配置 `org.springframework.amqp.rabbit.retry.MessageRecoverer` 策略,该策略在内部调用重试操作时用于 `RecoveryCallback`。
有关更多信息,请参阅 `setMessageRecoverer()` JavaDocs。

批处理消息

请参阅 批处理消息