入站网关
入站网关支持入站通道适配器上的所有属性(但“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。
批处理消息
请参阅 批处理消息。