|
对于最新稳定版本,请使用 Spring Integration 7.0.0! |
异步出站网关
前一节讨论的网关是同步的,发送线程会被暂停,直到
回复已收到(或发生超时)。
Spring Integration 4.3 版本增加了异步网关,使用异步兔子模板来自春季AMQP。
发送消息后,线程在发送作完成后立即返回,收到消息后,回复会通过模板的监听器容器线程发送。
当网关在轮询线程中被调用时,这非常有用。
线程已发布,可用于框架内的其他任务。
以下列表展示了AMQP异步出站网关的可能配置选项:
-
Java DSL
-
Java
-
XML
@Configuration
public class AmqpAsyncApplication {
@Bean
public IntegrationFlow asyncAmqpOutbound(AsyncRabbitTemplate asyncRabbitTemplate) {
return f -> f
.handle(Amqp.asyncOutboundGateway(asyncRabbitTemplate)
.routingKey("queue1")); // default exchange - route to queue 'queue1'
}
@MessagingGateway(defaultRequestChannel = "asyncAmqpOutbound.input")
public interface MyGateway {
String sendToRabbit(String data);
}
}
@Configuration
public class AmqpAsyncConfig {
@Bean
@ServiceActivator(inputChannel = "amqpOutboundChannel")
public AsyncAmqpOutboundGateway amqpOutbound(AsyncRabbitTemplate asyncTemplate) {
AsyncAmqpOutboundGateway outbound = new AsyncAmqpOutboundGateway(asyncTemplate);
outbound.setRoutingKey("foo"); // default exchange - route to queue 'foo'
return outbound;
}
@Bean
public AsyncRabbitTemplate asyncTemplate(RabbitTemplate rabbitTemplate,
SimpleMessageListenerContainer replyContainer) {
return new AsyncRabbitTemplate(rabbitTemplate, replyContainer);
}
@Bean
public SimpleMessageListenerContainer replyContainer() {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(ccf);
container.setQueueNames("asyncRQ1");
return container;
}
@Bean
public MessageChannel amqpOutboundChannel() {
return new DirectChannel();
}
}
<int-amqp:outbound-async-gateway id="asyncOutboundGateway" (1)
request-channel="myRequestChannel" (2)
async-template="" (3)
exchange-name="" (4)
exchange-name-expression="" (5)
order="1" (6)
reply-channel="" (7)
reply-timeout="" (8)
requires-reply="" (9)
routing-key="" (10)
routing-key-expression="" (11)
default-delivery-mode"" (12)
confirm-correlation-expression="" (13)
confirm-ack-channel="" (14)
confirm-nack-channel="" (15)
confirm-timeout="" (16)
return-channel="" (17)
lazy-connect="true" /> (18)
| 1 | 该适配器的唯一ID。 自选。 |
| 2 | 消息通道,消息应发送至该通道,以便转换为并发布到AMQP交换机。 必填。 |
| 3 | Bean 对配置的引用异步兔子模板.
可选(默认为async兔子模板). |
| 4 | 消息应发送到的AMQP交换机名称。 如果未提供,消息会发送到默认的无名交换机。 与“交换名-表达式”互斥。 自选。 |
| 5 | 一个 SpEL 表达式,用于确定消息发送到的 AMQP 交换名称,消息作为根对象。 如果未提供,消息会发送到默认的无名交换机。 与“交换名”互斥。 自选。 |
| 6 | 当多个消费者注册时,该消费者的顺序,从而实现负载均衡和故障切换。
可选(默认为Ordered.LOWEST_PRECEDENCE [=Integer.MAX_VALUE]). |
| 7 | 消息通道,回复应在收到AMQP队列并转换后发送。 自选。 |
| 8 | 网关在向回复信道.
这只适用于回复信道可以阻挡——例如队列通道目前容量已满。
默认是无限。 |
| 9 | 当没有收到回复消息时,AsyncRabbitTemplate 的“receiveTimeout”属性,该设置为true网关向入站消息发送错误消息errorChannel页眉。
当没有收到回复消息时,AsyncRabbitTemplate 的“receiveTimeout”属性,该设置为false网关向默认发送错误消息errorChannel(如果有的话)。
它默认为true. |
| 10 | 发送消息时使用的路由密钥。
默认情况下,这是一个空的字符串.
与“路由密钥表达式”互斥。
自选。 |
| 11 | 一个用于计算以确定发送消息时使用的路由密钥的 SpEL 表达式,
以消息为根对象(例如,'payload.key')。
默认情况下,这是一个空的字符串.
与“路由密钥”互斥。
自选。 |
| 12 | 消息的默认传递方式:持续或NON_PERSISTENT.
如果头部映射器设定送达方式。
如果 Spring Integration 消息头(amqp_deliveryMode)存在,则DefaultHeaderMapper设定值。
如果未提供该属性且头部映射器未设置,默认值依赖于底层的 Spring AMQPMessageProperties转换器被以下机构使用兔子模板.
如果没有自定义,默认是持续.
自选。 |
| 13 | 一个定义相关数据的表达式。
提供后,该模板配置底层AMQP模板以接收发布者确认。
需要专用兔子模板以及一个缓存连接工厂其出版社确认属性设置为true.
当收到发布者确认并提供相关数据时,确认会写入确认-确认-通道或者确认-nack-频道,取决于确认类型。
确认的有效载荷是该表达式定义的相关性数据,消息的“amqp_publishConfirm”头设置为true (啊)或false (纳克).
为纳克实例,一个额外的头部(amqp_publishConfirmNackCause)被提供。
例子:头部['myCorrelationData'],有效载荷.
如果表达式解析为留言<?>实例(例如“#this”),即在啊/纳克通道基于该消息,并添加了额外的头部。
另见出版商确认与退货的替代机制。
自选。 |
| 14 | 正向的通道(啊) 已发送出版商确认函件。
有效载荷是由确认-相关-表达.
需要基础异步兔子模板拥有其enableConfirms属性设置为true.
另见出版商确认与退货的替代机制。
可选(默认为零通道). |
| 15 | 自4.2版本起。
负向的通道(纳克) 已发送出版商确认函件。
有效载荷是由确认-相关-表达.
需要基础异步兔子模板拥有其enableConfirms属性设置为true.
另见出版商确认与退货的替代机制。
可选(默认为零通道). |
| 16 | 设置后,如果发布者确认未在毫秒内收到,网关会合成负确认(nack)。 待确认每50%检查一次,因此实际发送nack的时间介于1倍到1.5倍之间。 另见出版商确认与退货的替代机制。 默认为无(nacks不会生成)。 |
| 17 | 返回消息发送到的信道。
在提供后,底层的AMQP模板被配置为返回无法投递的消息到网关。
该消息由AMQP接收到的数据构成,并附加以下额外头部:amqp_returnReplyCode,amqp_returnReplyText,amqp_returnExchange和amqp_returnRoutingKey.
需要基础异步兔子模板拥有其命令的属性设置为true.
另见出版商确认与退货的替代机制。
自选。 |
| 18 | 当设置为false,端点在应用上下文初始化期间尝试连接到代理。
这样做可以“快速失败”检测错误配置,通过在代理程序失效时记录错误消息。
什么时候true(默认情况下),连接被建立(如果连接尚未存在,因为有其他组件建立
它)在发送第一条消息时。 |
另请参见异步服务激活器以获取更多信息。
|
兔子模板
当您使用确认和退货时,我们建议您 |