入站网关
入站网关支持入站通道适配器上的所有属性(除了“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 | 对 AmqpHeaderMapper 的引用,在接收 AMQP 消息时使用。可选。默认情况下,只有标准 AMQP 属性(如 contentType )被复制到 Spring Integration MessageHeaders 中,以及从 MessageHeaders 中复制到 AMQP 消息中。默认的 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 消息属性,而用户定义的标头则映射到 'headers' 属性。仅当未提供 'header-mapper' 引用时,才能提供此属性。此列表中的值也可以是与标头名称匹配的简单模式(例如,"*" 或 "foo*, bar" 或 "*foo" )。 |
6 | 预期回复消息所在的 Message Channel。可选。 |
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 属性的情况,则必须指定此选项或在该模板上配置默认的 exchange 和 routingKey 。 |
有关配置 listener-container
属性的信息,请参见 入站通道适配器 中的说明。
从 5.5 版本开始,AmqpInboundChannelAdapter
可以使用 org.springframework.amqp.rabbit.retry.MessageRecoverer
策略进行配置,该策略在内部调用重试操作时在 RecoveryCallback
中使用。有关更多信息,请参见 setMessageRecoverer()
JavaDocs。
批量消息
请参见 批量消息。