消息监听器容器配置

SimpleMessageListenerContainer (SMLC) 和 DirectMessageListenerContainer (DMLC) 有许多与事务和服务质量相关的配置选项,其中一些选项会相互影响。 适用于 SMLC、DMLC 或 StreamListenerContainer (StLC) 的属性(请参阅 使用 RabbitMQ Stream 插件)在相应列中以复选标记表示。 有关帮助您决定哪种容器适合您的应用程序的信息,请参阅 选择容器

下表显示了容器属性名称及其等效的属性名称(括号中),在使用命名空间配置 <rabbit:listener-container/> 时。 该元素上的 type 属性可以是 simple(默认)或 direct,分别指定 SMLCDMLC。 某些属性未通过命名空间公开。 这些属性的属性值显示为 N/A

Table 1. 消息监听器容器的配置选项

属性 (属性)

描述

SMLC

DMLC

StLC

[id="ackTimeout"][id="ackTimeout"][id="ackTimeout"]<<`ackTimeout`,ackTimeout>> (N/A)

当设置了 messagesPerAck 时,此超时用作发送确认的替代方案。 当新消息到达时,未确认消息的数量与 messagesPerAck 进行比较,并且自上次确认以来的时间与此值进行比较。 如果任一条件为 true,则确认消息。 当没有新消息到达且存在未确认消息时,此超时是近似的,因为条件仅在每个 monitorInterval 检查一次。 另请参阅此表中的 messagesPerAckmonitorInterval

image::tickmark.png[]

[id="acknowledgeMode"][id="acknowledgeMode"][id="acknowledgeMode"]<<`acknowledgeMode`,acknowledgeMode>> (acknowledge)

* NONE:不发送任何确认(与 channelTransacted=true 不兼容)。 RabbitMQ 将此称为“autoack”,因为代理假定所有消息都已确认,而无需消费者采取任何操作。 * MANUAL:监听器必须通过调用 Channel.basicAck() 来确认所有消息。 * AUTO:容器自动确认消息,除非 MessageListener 抛出异常。 请注意,acknowledgeModechannelTransacted 互补——如果通道是事务性的,代理除了确认之外还需要提交通知。 这是默认模式。 另请参阅 batchSize

image::tickmark.png[]

image::tickmark.png[]

[id="adviceChain"][id="adviceChain"][id="adviceChain"]<<`adviceChain`,adviceChain>> (advice-chain)

一个 AOP Advice 数组,用于应用于监听器执行。 这可用于应用额外的横切关注点,例如在代理死亡时自动重试。 请注意,只要代理仍然存活,CachingConnectionFactory 就会处理 AMQP 错误后的简单重新连接。

image::tickmark.png[]

image::tickmark.png[]

[id="afterReceivePostProcessors"][id="afterReceivePostProcessors"][id="afterReceivePostProcessors"]<<`afterReceivePostProcessors`,afterReceivePostProcessors>> (N/A)

一个 MessagePostProcessor 实例数组,在调用监听器之前调用。 后处理器可以实现 PriorityOrderedOrdered。 数组按未排序成员最后调用的顺序排序。 如果后处理器返回 null,则消息将被丢弃(并酌情确认)。

image::tickmark.png[]

image::tickmark.png[]

[id="alwaysRequeueWithTxManagerRollback"][id="alwaysRequeueWithTxManagerRollback"][id="alwaysRequeueWithTxManagerRollback"]<<`alwaysRequeueWithTxManagerRollback`,alwaysRequeueWithTxManagerRollback>> (N/A)

当配置了事务管理器时,设置为 true 以在回滚时始终重新排队消息。

image::tickmark.png[]

image::tickmark.png[]

[id="autoDeclare"][id="autoDeclare"][id="autoDeclare"]<<`autoDeclare`,autoDeclare>> (auto-declare)

当设置为 true(默认)时,如果容器在启动期间检测到其至少一个队列丢失,它将使用 RabbitAdmin 重新声明所有 AMQP 对象(队列、交换、绑定),可能是因为它是 auto-delete 队列或已过期队列,但如果队列因任何原因丢失,则重新声明将继续。 要禁用此行为,请将此属性设置为 false。 请注意,如果容器的所有队列都丢失,则容器将无法启动。

NOTE: 在版本 1.6 之前,如果上下文中存在多个 admin,容器将随机选择一个。 如果没有 admin,它将在内部创建一个。 在任何一种情况下,这都可能导致意外结果。 从版本 1.6 开始,要使 autoDeclare 工作,上下文中必须只有一个 RabbitAdmin,或者必须使用 rabbitAdmin 属性在容器上配置对特定实例的引用。

image::tickmark.png[]

image::tickmark.png[]

[id="autoStartup"][id="autoStartup"][id="autoStartup"]<<`autoStartup`,autoStartup>> (auto-startup)

标志,指示容器应在 ApplicationContext 启动时启动(作为 SmartLifecycle 回调的一部分,发生在所有 bean 初始化之后)。 默认为 true,但如果您的代理在启动时可能不可用,您可以将其设置为 false,并在您知道代理准备就绪时手动调用 start()

image::tickmark.png[]

image::tickmark.png[]

image::tickmark.png[]

[id="batchSize"][id="batchSize"][id="batchSize"]<<`batchSize`,batchSize>> (transaction-size) (batch-size)

当与 acknowledgeMode 设置为 AUTO 一起使用时,容器会尝试处理多达此数量的消息,然后发送确认(等待每个消息直到接收超时设置)。 这也是事务性通道提交的时候。 如果 prefetchCount 小于 batchSize,则会将其增加以匹配 batchSize

image::tickmark.png[]

[id="batchingStrategy"][id="batchingStrategy"][id="batchingStrategy"]<<`batchingStrategy`,batchingStrategy>> (N/A)

消息去批处理时使用的策略。 默认 SimpleDebatchingStrategy。 请参阅 批处理@RabbitListener 与批处理

image::tickmark.png[]

image::tickmark.png[]

[id="channelTransacted"][id="channelTransacted"][id="channelTransacted"]<<`channelTransacted`,channelTransacted>> (channel-transacted)

布尔标志,表示所有消息都应在事务中确认(手动或自动)。

image::tickmark.png[]

image::tickmark.png[]

[id="concurrency"][id="concurrency"][id="concurrency"]<<`concurrency`,concurrency>> (N/A)

m-n 每个监听器的并发消费者范围(最小,最大)。 如果只提供了 n,则 n 是固定数量的消费者。 请参阅 监听器并发

image::tickmark.png[]

[id="concurrentConsumers"][id="concurrentConsumers"][id="concurrentConsumers"]<<`concurrentConsumers`,concurrentConsumers>> (concurrency)

为每个监听器初始启动的并发消费者数量。 请参阅 监听器并发。 对于 StLC,并发通过重载的 superStream 方法控制;请参阅 使用单一活动消费者消费超级流

image::tickmark.png[]

image::tickmark.png[]

[id="connectionFactory"][id="connectionFactory"][id="connectionFactory"]<<`connectionFactory`,connectionFactory>> (connection-factory)

ConnectionFactory 的引用。 当使用 XML 命名空间配置时,默认引用的 bean 名称是 rabbitConnectionFactory

image::tickmark.png[]

image::tickmark.png[]

[id="consecutiveActiveTrigger"][id="consecutiveActiveTrigger"][id="consecutiveActiveTrigger"]<<`consecutiveActiveTrigger`,consecutiveActiveTrigger>> (min-consecutive-active)

消费者连续接收消息的最小数量,且未发生接收超时,当考虑启动新消费者时。 也受 'batchSize' 影响。 请参阅 监听器并发。 默认值:10。

image::tickmark.png[]

[id="consecutiveIdleTrigger"][id="consecutiveIdleTrigger"][id="consecutiveIdleTrigger"]<<`consecutiveIdleTrigger`,consecutiveIdleTrigger>> (min-consecutive-idle)

消费者在考虑停止消费者之前必须经历的接收超时次数的最小数量。 也受 'batchSize' 影响。 请参阅 监听器并发。 默认值:10。

image::tickmark.png[]

[id="consumerBatchEnabled"][id="consumerBatchEnabled"][id="consumerBatchEnabled"]<<`consumerBatchEnabled`,consumerBatchEnabled>> (batch-enabled)

如果 MessageListener 支持,将其设置为 true 将启用离散消息的批处理,最多达到 batchSize;如果在 receiveTimeout 内没有新消息到达或收集批处理消息的时间超过 batchReceiveTimeout,则将传递部分批处理。 当此为 false 时,批处理仅支持由生产者创建的批处理;请参阅 批处理

image::tickmark.png[]

[id="consumerCustomizer"][id="consumerCustomizer"][id="consumerCustomizer"]<<`consumerCustomizer`,consumerCustomizer>> (N/A)

一个 ConsumerCustomizer bean,用于修改容器创建的流消费者。

image::tickmark.png[]

[id="consumerStartTimeout"][id="consumerStartTimeout"][id="consumerStartTimeout"]<<`consumerStartTimeout`,consumerStartTimeout>> (N/A)

等待消费者线程启动的时间(毫秒)。 如果此时间过去,则会写入错误日志。 发生这种情况的一个示例是,如果配置的 taskExecutor 没有足够的线程来支持容器 concurrentConsumers

请参阅 线程和异步消费者。 默认值:60000(一分钟)。

image::tickmark.png[]

[id="consumerTagStrategy"][id="consumerTagStrategy"][id="consumerTagStrategy"]<<`consumerTagStrategy`,consumerTagStrategy>> (consumer-tag-strategy)

设置 ConsumerTagStrategy 的实现,从而为每个消费者创建唯一的标签。

image::tickmark.mark[]

image::tickmark.png[]

[id="consumersPerQueue"][id="consumersPerQueue"][id="consumersPerQueue"]<<`consumersPerQueue`,consumersPerQueue>> (consumers-per-queue)

为每个配置的队列创建的消费者数量。 请参阅 监听器并发

image::tickmark.png[]

[id="consumeDelay"][id="consumeDelay"][id="consumeDelay"]<<`consumeDelay`,consumeDelay>> (N/A)

当使用 {rabbitmq-server-github}/rabbitmq_sharding[RabbitMQ Sharding Plugin] 且 concurrentConsumers > 1 时,存在一个竞争条件,可能阻止消费者在分片之间均匀分布。 使用此属性在消费者启动之间添加少量延迟,以避免此竞争条件。 您应该试验不同的值以确定适合您的环境的延迟。

image::tickmark.png[]

image::tickmark.png[]

[id="debatchingEnabled"][id="debatchingEnabled"][id="debatchingEnabled"]<<`debatchingEnabled`,debatchingEnabled>> (N/A)

当为 true 时,监听器容器将对批处理消息进行去批处理,并用批处理中的每条消息调用监听器。 从版本 2.2.7 开始,如果监听器是 BatchMessageListenerChannelAwareBatchMessageListener生产者创建的批处理 将作为 List<Message> 进行去批处理。 否则,批处理中的消息将逐个呈现。 默认值为 true。 请参阅 批处理@RabbitListener 与批处理

image::tickmark.png[]

image::tickmark.png[]

[id="declarationRetries"][id="declarationRetries"][id="declarationRetries"]<<`declarationRetries`,declarationRetries>> (declaration-retries)

当被动队列声明失败时的重试次数。 被动队列声明发生在消费者启动时,或者当从多个队列消费时,并非所有队列在初始化期间都可用时。 当经过重试后,所有配置的队列都无法被被动声明(出于任何原因)时,容器行为由前面描述的 missingQueuesFatal 属性控制。 默认值:三次重试(总共四次尝试)。

image::tickmark.png[]

[id="defaultRequeueRejected"][id="defaultRequeueRejected"][id="defaultRequeueRejected"]<<`defaultRequeueRejected`,defaultRequeueRejected>> (requeue-rejected)

确定由于监听器抛出异常而被拒绝的消息是否应重新排队。 默认值:true

image::tickmark.png[]

image::tickmark.png[]

[id="errorHandler"][id="errorHandler"][id="errorHandler"]<<`errorHandler`,errorHandler>> (error-handler)

ErrorHandler 策略的引用,用于处理在 MessageListener 执行期间可能发生的任何未捕获异常。 默认值:ConditionalRejectingErrorHandler

image::tickmark.png[]

image::tickmark.png[]

[id="exclusive"][id="exclusive"][id="exclusive"]<<`exclusive`,exclusive>> (exclusive)

确定此容器中的单个消费者是否对队列具有独占访问权限。 当此属性为 true 时,容器的并发性必须为 1。 如果另一个消费者具有独占访问权限,容器会根据 recovery-intervalrecovery-back-off 尝试恢复消费者。 当使用命名空间时,此属性出现在 <rabbit:listener/> 元素上,以及队列名称。 默认值:false

image::tickmark.png[]

image::tickmark.png[]

[id="exclusiveConsumerExceptionLogger"][id="exclusiveConsumerExceptionLogger"][id="exclusiveConsumerExceptionLogger"]<<`exclusiveConsumerExceptionLogger`,exclusiveConsumerExceptionLogger>> (N/A)

当独占消费者无法访问队列时使用的异常记录器。 默认情况下,此信息以 WARN 级别记录。

image::tickmark.png[]

image::tickmark.png[]

[id="failedDeclarationRetryInterval"][id="failedDeclarationRetryInterval"][id="failedDeclarationRetryInterval"]<<`failedDeclarationRetryInterval`,failedDeclarationRetryInterval>> (failed-declaration -retry-interval)

被动队列声明重试尝试之间的时间间隔。 被动队列声明发生在消费者启动时,或者当从多个队列消费时,并非所有队列在初始化期间都可用时。 默认值:5000(五秒)。

image::tickmark.png[]

image::tickmark.png[]

[id="forceCloseChannel"][id="forceCloseChannel"][id="forceCloseChannel"]<<`forceCloseChannel`,forceCloseChannel>> (N/A)

如果消费者在 shutdownTimeout 内没有响应关闭,如果此属性为 true,则通道将被关闭,导致任何未确认的消息重新排队。 自 2.0 版本以来默认为 true。 您可以将其设置为 false 以恢复到以前的行为。

image::tickmark.png[]

image::tickmark.png[]

[id="forceStop"][id="forceStop"][id="forceStop"]<<`forceStop`,forceStop>> (N/A)

设置为 true 以在处理完当前记录后停止(当容器停止时);导致所有预取的消息重新排队。 默认情况下,容器将取消消费者并处理所有预取的消息,然后停止。 自 2.4.14、3.0.6 版本以来。 默认值为 false

image::tickmark.png[]

image::tickmark.png[]

[id="globalQos"][id="globalQos"][id="globalQos"]<<`globalQos`,globalQos>> (global-qos)

当为 true 时,prefetchCount 将全局应用于通道,而不是应用于通道上的每个消费者。 有关更多信息,请参阅 basicQos.global

image::tickmark.png[]

image::tickmark.png[]

(group)

此属性仅在使用命名空间时可用。 指定后,将以该名称注册一个类型为 Collection<MessageListenerContainer> 的 bean,并且每个 <listener/> 元素的容器都将添加到集合中。 例如,这允许通过遍历集合来启动和停止容器组。 如果多个 <listener-container/> 元素具有相同的组值,则集合中的容器将形成所有指定容器的聚合。

image::tickmark.png[]

image::tickmark.png[]

[id="idleEventInterval"][id="idleEventInterval"][id="idleEventInterval"]<<`idleEventInterval`,idleEventInterval>> (idle-event-interval)

请参阅 检测空闲异步消费者

image::tickmark.png[]

image::tickmark.png[]

[id="javaLangErrorHandler"][id="javaLangErrorHandler"][id="javaLangErrorHandler"]<<`javaLangErrorHandler`,javaLangErrorHandler>> (N/A)

AbstractMessageListenerContainer.JavaLangErrorHandler 实现,当容器线程捕获 Error 时调用。 默认实现调用 System.exit(99);要恢复到以前的行为(什么都不做),请添加一个无操作处理程序。

image::tickmark.png[]

image::tickmark.png[]

[id="maxConcurrentConsumers"][id="maxConcurrentConsumers"][id="maxConcurrentConsumers"]<<`maxConcurrentConsumers`,maxConcurrentConsumers>> (max-concurrency)

按需启动的最大并发消费者数量。 必须大于或等于 'concurrentConsumers'。 请参阅 监听器并发

image::tickmark.png[]

[id="messagesPerAck"][id="messagesPerAck"][id="messagesPerAck"]<<`messagesPerAck`,messagesPerAck>> (N/A)

两次确认之间接收的消息数量。 使用此属性可以减少发送给代理的确认数量(代价是增加了消息重新投递的可能性)。 通常,您应该只在高吞吐量的监听器容器上设置此属性。 如果设置了此属性并且消息被拒绝(抛出异常),则待处理的确认将被确认,并且失败的消息将被拒绝。 不允许与事务性通道一起使用。 如果 prefetchCount 小于 messagesPerAck,则会将其增加以匹配 messagesPerAck。 默认值:每条消息都确认。 另请参阅此表中的 ackTimeout

image::tickmark.png[]

[id="mismatchedQueuesFatal"][id="mismatchedQueuesFatal"][id="mismatchedQueuesFatal"]<<`mismatchedQueuesFatal`,mismatchedQueuesFatal>> (mismatched-queues-fatal)

当容器启动时,如果此属性为 true(默认值:false),容器会检查上下文中声明的所有队列是否与代理上已有的队列兼容。 如果存在不匹配的属性(例如 auto-delete)或参数(例如 x-message-ttl),容器(和应用程序上下文)将因致命异常而无法启动。

如果在恢复期间(例如,连接丢失后)检测到问题,则容器将停止。

应用程序上下文中必须只有一个 RabbitAdmin(或一个通过 rabbitAdmin 属性专门配置在容器上的 RabbitAdmin)。 否则,此属性必须为 false

NOTE: 如果在初始启动期间代理不可用,容器将启动并在建立连接时检查条件。

IMPORTANT: 检查是针对上下文中所有队列进行的,而不仅仅是特定监听器配置使用的队列。 如果您希望将检查限制为容器使用的队列,则应为容器配置单独的 RabbitAdmin,并使用 rabbitAdmin 属性提供对其的引用。 有关更多信息,请参阅 条件声明

IMPORTANT: 在启动 @Lazy 标记的 bean 中的 @RabbitListener 容器时,禁用不匹配队列参数检测。 这是为了避免潜在的死锁,这可能导致此类容器的启动延迟长达 60 秒。 使用惰性监听器 bean 的应用程序应在获取惰性 bean 的引用之前检查队列参数。

image::tickmark.png[]

image::tickmark.png[]

[id="missingQueuesFatal"][id="missingQueuesFatal"][id="missingQueuesFatal"]<<`missingQueuesFatal`,missingQueuesFatal>> (missing-queues-fatal)

当设置为 true(默认)时,如果配置的队列在代理上均不可用,则被认为是致命的。 这会导致应用程序上下文在启动期间无法初始化。 此外,当队列在容器运行时被删除时,默认情况下,消费者会尝试三次连接队列(每五秒一次),如果这些尝试失败,则停止容器。

这在以前的版本中是不可配置的。

当设置为 false 时,在进行三次重试后,容器将进入恢复模式,就像其他问题一样,例如代理宕机。 容器会根据 recoveryInterval 属性尝试恢复。 在每次恢复尝试期间,每个消费者会再次尝试四次被动声明队列,间隔五秒。 此过程将无限期地继续。

您还可以使用属性 bean 全局设置所有容器的属性,如下所示:

[source,xml] ---- <util:properties id="spring.amqp.global.properties"> <prop key="mlc.missing.queues.fatal"> false </prop> </util:properties> ----

此全局属性不适用于任何已设置显式 missingQueuesFatal 属性的容器。

默认重试属性(三次重试,间隔五秒)可以通过设置以下属性来覆盖。

IMPORTANT: 在启动 @Lazy 标记的 bean 中的 @RabbitListener 容器时,禁用缺失队列检测。 这是为了避免潜在的死锁,这可能导致此类容器的启动延迟长达 60 秒。 使用惰性监听器 bean 的应用程序应在获取惰性 bean 的引用之前检查队列。

image::tickmark.png[]

image::tickmark.png[]

[id="monitorInterval"][id="monitorInterval"][id="monitorInterval"]<<`monitorInterval`,monitorInterval>> (monitor-interval)

对于 DMLC,会在此间隔调度一个任务来监视消费者的状态并恢复任何已失败的消费者。

image::tickmark.png[]

[id="noLocal"][id="noLocal"][id="noLocal"]<<`noLocal`,noLocal>> (N/A)

设置为 true 以禁用服务器向消费者传递在同一通道连接上发布的消息。

image::tickmark.png[]

image::tickmark.png[]

[id="phase"][id="phase"][id="phase"]<<`phase`,phase>> (phase)

autoStartuptrue 时,此容器应在此生命周期阶段启动和停止。 值越低,此容器启动越早,停止越晚。 默认值为 Integer.MAX_VALUE,表示容器尽可能晚启动,尽可能早停止。

image::tickmark.png[]

image::tickmark.png[]

[id="possibleAuthenticationFailureFatal"][id="possibleAuthenticationFailureFatal"][id="possibleAuthenticationFailureFatal"]<<`possibleAuthenticationFailureFatal`,possibleAuthenticationFailureFatal>> (possible-authentication-failure-fatal)

当设置为 true(SMLC 的默认值)时,如果在连接期间抛出 PossibleAuthenticationFailureException,则被认为是致命的。 这会导致应用程序上下文在启动期间无法初始化(如果容器配置为自动启动)。

版本 2.0 起。

DirectMessageListenerContainer

当设置为 false(默认值)时,每个消费者将根据 monitorInterval 尝试重新连接。

SimpleMessageListenerContainer

当设置为 false 时,在进行 3 次重试后,容器将进入恢复模式,就像其他问题一样,例如代理宕机。 容器将根据 recoveryInterval 属性尝试恢复。 在每次恢复尝试期间,每个消费者将再次尝试 4 次启动。 此过程将无限期地继续。

您还可以使用属性 bean 全局设置所有容器的属性,如下所示:

[source,xml] ---- <util:properties id="spring.amqp.global.properties"> <prop key="mlc.possible.authentication.failure.fatal"> false </prop> </util:properties> ----

此全局属性不适用于任何已设置显式 missingQueuesFatal 属性的容器。

默认重试属性(3 次重试,间隔 5 秒)可以使用此属性之后的属性来覆盖。

image::tickmark.png[]

image::tickmark.png[]

[id="prefetchCount"][id="prefetchCount"][id="prefetchCount"]<<`prefetchCount`,prefetchCount>> (prefetch)

每个消费者未确认消息的数量。 此值越高,消息传递速度越快,但非顺序处理的风险也越高。 如果 acknowledgeModeNONE,则忽略。 如有必要,此值会增加以匹配 batchSizemessagePerAck。 自 2.0 版起默认为 250。 您可以将其设置为 1 以恢复以前的行为。

IMPORTANT: 在某些情况下,预取值应较低——例如,对于大型消息,特别是如果处理速度较慢(消息可能在客户端进程中累积大量内存),以及如果严格的消息排序是必需的(在这种情况下,预取值应设置回 1)。 此外,对于低吞吐量消息和多个消费者(包括单个监听器容器实例内的并发),您可能希望减少预取以获得消息在消费者之间更均匀的分布。

另请参阅 globalQos

image::tickmark.png[]

image::tickmark.png[]

[id="rabbitAdmin"][id="rabbitAdmin"][id="rabbitAdmin"]<<`rabbitAdmin`,rabbitAdmin>> (admin)

当监听器容器监听至少一个自动删除队列,并且在启动期间发现该队列丢失时,容器会使用 RabbitAdmin 声明该队列以及任何相关的绑定和交换。 如果此类元素配置为使用条件声明(请参阅 条件声明),则容器必须使用配置为声明这些元素的 admin。 在此处指定该 admin。 仅在使用带有条件声明的自动删除队列时才需要。 如果您不希望在容器启动之前声明自动删除队列,请将 admin 上的 auto-startup 设置为 false。 默认为声明所有非条件元素的 RabbitAdmin

image::tickmark.png[]

image::tickmark.png[]

[id="receiveTimeout"][id="receiveTimeout"][id="receiveTimeout"]<<`receiveTimeout`,receiveTimeout>> (receive-timeout)

等待每条消息的最长时间。 如果 acknowledgeMode=NONE,则此属性影响很小——容器会不断循环并请求另一条消息。 它对 batchSize > 1 的事务性 Channel 影响最大,因为它可能导致已消费的消息在超时到期之前不被确认。 当 consumerBatchEnabled 为 true 时,如果在此超时发生之前批处理未完成,则将传递部分批处理。

image::tickmark.png[]

[id="batchReceiveTimeout"][id="batchReceiveTimeout"][id="batchReceiveTimeout"]<<`batchReceiveTimeout`,batchReceiveTimeout>> (batch-receive-timeout)

收集批处理消息的超时时间(毫秒)。 它限制了等待填满 batchSize 的时间。 当 batchSize > 1 并且收集批处理消息的时间大于 batchReceiveTime 时,将传递批处理。 默认值为 0(无超时)。

image::tickmark.png[]

[id="recoveryBackOff"][id="recoveryBackOff"][id="recoveryBackOff"]<<`recoveryBackOff`,recoveryBackOff>> (recovery-back-off)

指定 BackOff,用于在消费者因非致命原因启动失败时,两次启动尝试之间的时间间隔。 默认值为 FixedBackOff,每五秒无限次重试。 与 recoveryInterval 互斥。

image::tickmark.png[]

image::tickmark.png[]

[id="recoveryInterval"][id="recoveryInterval"][id="recoveryInterval"]<<`recoveryInterval`,recoveryInterval>> (recovery-interval)

确定消费者因非致命原因启动失败时,两次启动尝试之间的时间(毫秒)。 默认值:5000。 与 recoveryBackOff 互斥。

image::tickmark.png[]

image::tickmark.png[]

[id="retryDeclarationInterval"][id="retryDeclarationInterval"][id="retryDeclarationInterval"]<<`retryDeclarationInterval`,retryDeclarationInterval>> (missing-queue- retry-interval)

如果在消费者初始化期间配置的队列子集可用,则消费者将开始从这些队列消费。 消费者会使用此间隔尝试被动声明缺失的队列。 当此间隔过去后,将再次使用 'declarationRetries' 和 'failedDeclarationRetryInterval'。 如果仍然存在缺失的队列,消费者将再次等待此间隔,然后再次尝试。 此过程将无限期地继续,直到所有队列都可用。 默认值:60000(一分钟)。

image::tickmark.png[]

[id="shutdownTimeout"][id="shutdownTimeout"][id="shutdownTimeout"]<<`shutdownTimeout`,shutdownTimeout>> (N/A)

当容器关闭时(例如, 如果其封闭的 ApplicationContext 关闭),它会等待正在处理的消息,直到达到此限制。 默认值为五秒。

image::tickmark.png[]

image::tickmark.png[]

[id="startConsumerMinInterval"][id="startConsumerMinInterval"][id="startConsumerMinInterval"]<<`startConsumerMinInterval`,startConsumerMinInterval>> (min-start-interval)

按需启动每个新消费者之前必须经过的时间(毫秒)。 请参阅 监听器并发。 默认值:10000(10 秒)。

image::tickmark.png[]

[id="statefulRetryFatal"][id="statefulRetryFatal"][id="statefulRetryFatal"]<<`statefulRetryFatal`,statefulRetryFatal>> WithNullMessageId (N/A)

当使用有状态重试建议时,如果收到缺少 messageId 属性的消息,默认情况下,这被认为是致命的,导致消费者被停止。 将此设置为 false 以丢弃(或路由到死信队列)此类消息。

image::tickmark.png[]

image::tickmark.png[]

[id="stopConsumerMinInterval"][id="stopConsumerMinInterval"][id="stopConsumerMinInterval"]<<`stopConsumerMinInterval`,stopConsumerMinInterval>> (min-stop-interval)

当检测到空闲消费者时,自上次消费者停止以来,停止消费者之前必须经过的时间(毫秒)。 请参阅 监听器并发。 默认值:60000(一分钟)。

image::tickmark.png[]

[id="streamConverter"][id="streamConverter"][id="streamConverter"]<<`streamConverter`,streamConverter>> (N/A)

一个 StreamMessageConverter,用于将原生 Stream 消息转换为 Spring AMQP 消息。

image::tickmark.png[]

[id="taskExecutor"][id="taskExecutor"][id="taskExecutor"]<<`taskExecutor`,taskExecutor>> (task-executor)

对 Spring TaskExecutor(或标准 JDK 1.5+ Executor)的引用,用于执行监听器调用器。 默认值为 SimpleAsyncTaskExecutor,使用内部管理的线程。

image::tickmark.png[]

image::tickmark.png[]

[id="taskScheduler"][id="taskScheduler"][id="taskScheduler"]<<`taskScheduler`,taskScheduler>> (task-scheduler)

对于 DMLC,用于在 'monitorInterval' 运行监视任务的调度器。

image::tickmark.png[]

[id="transactionManager"][id="transactionManager"][id="transactionManager"]<<`transactionManager`,transactionManager>> (transaction-manager)

监听器操作的外部事务管理器。 也与 channelTransacted 互补——如果 Channel 是事务性的,则其事务与外部事务同步。

image::tickmark.png[]

image::tickmark.png[]