此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring AMQP 3.2.6spring-doc.cadn.net.cn

消息侦听器容器配置

有很多选项可用于配置SimpleMessageListenerContainer(SMLC) 和DirectMessageListenerContainer(DMLC) 与交易和服务质量有关,其中一些相互交互。 适用于 SMLC、DMLC 或StreamListenerContainer(圣LC)(请参阅使用 RabbitMQ Stream 插件)由相应列中的复选标记表示。 请参阅选择容器,以帮助您确定哪个容器适合您的应用程序。spring-doc.cadn.net.cn

下表显示了使用命名空间配置<rabbit:listener-container/>. 这type属性可以是simple(默认)或direct指定SMLCDMLC分别。 命名空间不会公开某些属性。 这些由N/A属性。spring-doc.cadn.net.cn

表 1.消息侦听器容器的配置选项
财产 (属性) 描述 SMLC公司 DMLC的 StLC的

ackTimeout
(不适用)spring-doc.cadn.net.cn

什么时候messagesPerAck设置时,此超时将用作发送 ACK 的替代方法。 当新消息到达时,将未确认消息的计数与messagesPerAck,并将自上次 ack 以来的时间与此值进行比较。 如果任一条件为true,则确认消息。 当没有新消息到达并且有未确认的消息时,此超时是近似值,因为仅检查每个条件monitorInterval. 也可以看看messagesPerAckmonitorInterval在此表中。spring-doc.cadn.net.cn

刻度线

acknowledgeMode
(确认)spring-doc.cadn.net.cn

  • NONE:不发送确认(与channelTransacted=true). RabbitMQ 将此称为“autoack”,因为代理假设所有消息都已被确认,而消费者没有执行任何作。spring-doc.cadn.net.cn

  • MANUAL:侦听器必须通过调用来确认所有消息Channel.basicAck().spring-doc.cadn.net.cn

  • AUTO:容器会自动确认消息,除非MessageListener抛出异常。 请注意acknowledgeMode是互补的channelTransacted— 如果通道被交易,则代理除了 ACK 之外还需要提交通知。 这是默认模式。 也可以看看batchSize.spring-doc.cadn.net.cn

刻度线
刻度线

adviceChain
(建议链)spring-doc.cadn.net.cn

应用于侦听器执行的 AOP 建议数组。 这可用于应用其他跨领域问题,例如在代理死亡时自动重试。 请注意,AMQP 错误后的简单重新连接由CachingConnectionFactory,只要经纪人还活着。spring-doc.cadn.net.cn

刻度线
刻度线

afterReceivePostProcessors
(不适用)spring-doc.cadn.net.cn

数组MessagePostProcessor在调用侦听器之前调用的实例。 后处理器可以实现PriorityOrderedOrdered. 数组使用最后调用的无序成员进行排序。 如果后处理器返回null,则该消息将被丢弃(并在适当的情况下确认)。spring-doc.cadn.net.cn

刻度线
刻度线

alwaysRequeueWithTxManagerRollback
(不适用)spring-doc.cadn.net.cn

设置为true在配置事务管理器时始终在回滚时将消息重新排队。spring-doc.cadn.net.cn

刻度线
刻度线

autoDeclare
(自动声明)spring-doc.cadn.net.cn

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

在 1.6 版之前,如果上下文中有多个管理员,容器将随机选择一个。 如果没有管理员,它将在内部创建一个管理员。 无论哪种情况,这都可能导致意外结果。 从 1.6 版开始,对于autoDeclare要工作,必须恰好有一个RabbitAdmin,或者必须使用rabbitAdmin财产。
刻度线
刻度线

autoStartup
(自动启动)spring-doc.cadn.net.cn

标志,指示容器应在ApplicationContext(作为SmartLifecycle回调,在所有 bean 初始化后发生)。 默认为true,但您可以将其设置为false如果您的经纪人在启动时可能不可用并调用start()稍后,当您知道代理已准备就绪时手动。spring-doc.cadn.net.cn

刻度线
刻度线
刻度线

batchSize
(交易规模) (批量大小)spring-doc.cadn.net.cn

acknowledgeMode设置为AUTO,容器在发送 ACK 之前尝试处理最多此数量的消息(等待每条消息直到接收超时设置)。 这也是提交事务通道的时候。 如果prefetchCount小于batchSize,则增加以匹配batchSize.spring-doc.cadn.net.cn

刻度线

batchingStrategy
(不适用)spring-doc.cadn.net.cn

取消批处理消息时使用的策略。 违约SimpleDebatchingStrategy. 请参阅批处理和@RabbitListener批处理。spring-doc.cadn.net.cn

刻度线
刻度线

channelTransacted
(通道交易)spring-doc.cadn.net.cn

布尔标志,表示所有消息都应在事务中确认(手动或自动)。spring-doc.cadn.net.cn

刻度线
刻度线

concurrency
(不适用)spring-doc.cadn.net.cn

m-n每个侦听器的并发使用者范围(最小值、最大值)。 苟n提供,n是固定数量的消费者。 请参阅侦听器并发spring-doc.cadn.net.cn

刻度线

concurrentConsumers
(并发)spring-doc.cadn.net.cn

每个侦听器最初要启动的并发使用者数。 请参阅侦听器并发。 对于StLC,并发通过重载的superStream方法;请参阅使用单个活动使用者使用超级流spring-doc.cadn.net.cn

刻度线
刻度线

connectionFactory
(连接工厂)spring-doc.cadn.net.cn

ConnectionFactory. 使用 XML 命名空间进行配置时,缺省引用的 Bean 名称为rabbitConnectionFactory.spring-doc.cadn.net.cn

刻度线
刻度线

consecutiveActiveTrigger
(最小连续活动)spring-doc.cadn.net.cn

在考虑启动新使用者时,使用者收到的最小连续消息数,而不会发生接收超时。 也受到“batchSize”的影响。 请参阅侦听器并发。 默认值:10。spring-doc.cadn.net.cn

刻度线

consecutiveIdleTrigger
(最小连续空闲)spring-doc.cadn.net.cn

使用者在考虑停止使用者之前必须经历的最小接收超时数。 也受到“batchSize”的影响。 请参阅侦听器并发。 默认值:10。spring-doc.cadn.net.cn

刻度线

consumerBatchEnabled
(批量启用)spring-doc.cadn.net.cn

如果MessageListener支持它,将此设置为 true 允许对离散消息进行批处理,最多batchSize;如果没有新消息到达,则将传递部分批次receiveTimeout或收集批处理消息的时间已超过。batchReceiveTimeout. 如果此值为 false,则批处理仅支持由生产者创建的批处理;请参阅批处理spring-doc.cadn.net.cn

刻度线

consumerCustomizer
(不适用)spring-doc.cadn.net.cn

一个ConsumerCustomizer用于修改容器创建的流消费者的 Bean。spring-doc.cadn.net.cn

刻度线

consumerStartTimeout
(不适用)spring-doc.cadn.net.cn

等待使用者线程启动的时间(以毫秒为单位)。 如果过了这个时间,则会写入错误日志。 可能发生这种情况的一个示例是,如果配置的taskExecutor没有足够的线程来支持容器concurrentConsumers.spring-doc.cadn.net.cn

请参阅线程和异步使用者。 默认值:60000(一分钟)。spring-doc.cadn.net.cn

刻度线

consumerTagStrategy
(消费者标签策略)spring-doc.cadn.net.cn

设置 ConsumerTagStrategy 的实现,以便为每个使用者创建一个(唯一)标记。spring-doc.cadn.net.cn

刻度线
刻度线

consumersPerQueue
(每个队列的使用者)spring-doc.cadn.net.cn

要为每个配置的队列创建的使用者数量。 请参阅侦听器并发spring-doc.cadn.net.cn

刻度线

consumeDelay
(不适用)spring-doc.cadn.net.cn

RabbitMQ 分片插件concurrentConsumers > 1,则存在竞争条件,可能会阻止使用者在分片之间均匀分布。 使用此属性在使用者启动之间添加小延迟,以避免此争用条件。 应试验值以确定适合环境的延迟。spring-doc.cadn.net.cn

刻度线
刻度线

debatchingEnabled
(不适用)spring-doc.cadn.net.cn

当 true 时,侦听器容器将对批处理的消息进行批处理,并使用批处理中的每条消息调用侦听器。 从 2.2.7 版开始,生产者创建的批次将作为List<Message>如果监听器是BatchMessageListenerChannelAwareBatchMessageListener. 否则,批处理中的消息将一次显示一条。 默认值为 true。 请参阅批处理和@RabbitListener批处理。spring-doc.cadn.net.cn

刻度线
刻度线

declarationRetries
(声明重试)spring-doc.cadn.net.cn

被动队列声明失败时的重试次数。 当使用者启动时,或者当从多个队列使用时,当初始化期间并非所有队列都可用时,就会发生被动队列声明。 当重试用尽后无法被动声明任何配置的队列(出于任何原因)时,容器行为由missingQueuesFatal属性,如前所述。 默认值:重试 3 次(总共尝试 4 次)。spring-doc.cadn.net.cn

刻度线

defaultRequeueRejected
(重新排队拒绝)spring-doc.cadn.net.cn

确定是否应将因侦听器引发异常而被拒绝的消息重新排队。 违约:true.spring-doc.cadn.net.cn

刻度线
刻度线

errorHandler
(错误处理程序)spring-doc.cadn.net.cn

ErrorHandler用于处理 MessageListener 执行期间可能发生的任何未捕获异常的策略。 违约:ConditionalRejectingErrorHandlerspring-doc.cadn.net.cn

刻度线
刻度线

exclusive
(独家)spring-doc.cadn.net.cn

确定此容器中的单个使用者是否具有对队列的独占访问权限。 容器的并发性必须为 1,当这是true. 如果另一个消费者具有独占访问权限,则容器会尝试恢复消费者,根据recovery-intervalrecovery-back-off. 使用命名空间时,此属性将显示在<rabbit:listener/>元素以及队列名称。 违约:false.spring-doc.cadn.net.cn

刻度线
刻度线

exclusiveConsumerExceptionLogger
(不适用)spring-doc.cadn.net.cn

当独占使用者无法访问队列时使用的异常记录器。 默认情况下,这记录在WARN水平。spring-doc.cadn.net.cn

刻度线
刻度线

failedDeclarationRetryInterval
(失败声明 -重试间隔)spring-doc.cadn.net.cn

被动队列声明重试尝试之间的间隔。 当使用者启动时,或者当从多个队列使用时,当初始化期间并非所有队列都可用时,就会发生被动队列声明。 默认值:5000(五秒)。spring-doc.cadn.net.cn

刻度线
刻度线

forceCloseChannel
(不适用)spring-doc.cadn.net.cn

如果消费者在shutdownTimeout,如果这是true,通道将被关闭,导致任何未确认的消息被重新排队。 默认为true从 2.0 开始。 您可以将其设置为false以恢复到以前的行为。spring-doc.cadn.net.cn

刻度线
刻度线

forceStop
(不适用)spring-doc.cadn.net.cn

设置为 true 在处理当前记录后停止(当容器停止时);导致所有预取的消息重新排队。 默认情况下,容器将取消使用者并在停止之前处理所有预取的消息。 从 2.4.14、3.0.6 版本开始 默认为false.spring-doc.cadn.net.cn

刻度线
刻度线

globalQos
(全球-qoS)spring-doc.cadn.net.cn

当 true 时,则prefetchCount全局应用于通道,而不是应用于通道上的每个使用者。 看basicQos.global了解更多信息。spring-doc.cadn.net.cn

刻度线
刻度线

(组)spring-doc.cadn.net.cn

这仅在使用命名空间时可用。 指定时,类型为Collection<MessageListenerContainer>使用此名称注册,并且 每个容器<listener/>元素添加到集合中。 例如,这允许通过迭代集合来启动和停止容器组。 如果多个<listener-container/>元素具有相同的组值,集合表单中的容器 如此指定的所有容器的集合。spring-doc.cadn.net.cn

刻度线
刻度线

idleEventInterval
(空闲事件间隔)spring-doc.cadn.net.cn

请参阅检测空闲异步使用者spring-doc.cadn.net.cn

刻度线
刻度线

javaLangErrorHandler
(不适用)spring-doc.cadn.net.cn

AbstractMessageListenerContainer.JavaLangErrorHandler当容器线程捕获Error. 默认实现调用System.exit(99);要恢复到以前的行为(不执行任何作),请添加一个无作处理程序。spring-doc.cadn.net.cn

刻度线
刻度线

maxConcurrentConsumers
(最大并发)spring-doc.cadn.net.cn

如果需要,按需启动的最大并发使用者数。 必须大于或等于“concurrentConsumers”。 请参阅侦听器并发spring-doc.cadn.net.cn

刻度线

messagesPerAck
(不适用)spring-doc.cadn.net.cn

在确认之间要接收的消息数。 使用它来减少发送到代理的确认数(以增加重新传递消息的可能性为代价)。 通常,应仅在大容量侦听器容器上设置此属性。 如果设置了此设置并拒绝了消息(引发异常),则确认挂起的确认并拒绝失败的消息。 不允许用于交易通道。 如果prefetchCount小于messagesPerAck,则增加以匹配messagesPerAck. 默认值:确认每封邮件。 也可以看看ackTimeout在此表中。spring-doc.cadn.net.cn

刻度线

mismatchedQueuesFatal
(不匹配队列致命)spring-doc.cadn.net.cn

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

如果在恢复过程中检测到问题(例如,在连接丢失后),则容器将停止。spring-doc.cadn.net.cn

必须有一个RabbitAdmin在应用程序上下文中(或通过使用rabbitAdmin属性)。 否则,此属性必须是false.spring-doc.cadn.net.cn

如果代理在初始启动期间不可用,则容器将启动,并在建立连接时检查条件。
检查是针对上下文中的所有队列进行的,而不仅仅是特定侦听器配置为使用的队列。 如果您希望将检查限制为仅容器使用的队列,则应配置单独的RabbitAdmin,并使用rabbitAdmin财产。 有关详细信息,请参阅条件声明
启动容器时禁用不匹配的队列参数检测@RabbitListener在标记为@Lazy. 这是为了避免潜在的死锁,锁可能会将此类容器的启动延迟长达 60 秒。 使用延迟侦听器 Bean 的应用程序应该在获取对延迟 Bean 的引用之前检查队列参数。
刻度线
刻度线

missingQueuesFatal
(缺少队列致命)spring-doc.cadn.net.cn

当设置为true(默认),如果代理上没有可用的配置队列,则将其视为致命队列。 这会导致应用程序上下文在启动期间无法初始化。 此外,当在容器运行时删除队列时,默认情况下,使用者会重试三次以连接到队列(以五秒的间隔),并在这些尝试失败时停止容器。spring-doc.cadn.net.cn

这在以前的版本中是不可配置的。spring-doc.cadn.net.cn

当设置为false,在进行三次重试后,容器将进入恢复模式,就像其他问题一样,例如代理关闭。 容器尝试根据recoveryInterval财产。 在每次恢复尝试期间,每个使用者再次尝试四次,以五秒的间隔被动声明队列。 这个过程无限期地持续下去。spring-doc.cadn.net.cn

您还可以使用属性 bean 为所有容器全局设置属性,如下所示:spring-doc.cadn.net.cn

<util:properties
        id="spring.amqp.global.properties">
    <prop key="mlc.missing.queues.fatal">
        false
    </prop>
</util:properties>

此全局属性不适用于具有显式missingQueuesFatal属性集。spring-doc.cadn.net.cn

可以通过设置以下属性来覆盖默认重试属性(以五秒为间隔重试三次)。spring-doc.cadn.net.cn

启动容器时禁用缺少队列检测@RabbitListener在标记为@Lazy. 这是为了避免潜在的死锁,锁可能会将此类容器的启动延迟长达 60 秒。 使用延迟侦听器 Bean 的应用程序应该在获取对延迟 Bean 的引用之前检查队列。
刻度线
刻度线

monitorInterval
(监视间隔)spring-doc.cadn.net.cn

使用 DMLC,任务被安排在此时间间隔运行,以监视使用者的状态并恢复任何失败的任务。spring-doc.cadn.net.cn

刻度线

noLocal
(不适用)spring-doc.cadn.net.cn

设置为true以禁用从服务器向使用者传递在同一通道连接上发布的消息。spring-doc.cadn.net.cn

刻度线
刻度线

phase
(阶段)spring-doc.cadn.net.cn

什么时候autoStartuptrue,此容器应启动和停止的生命周期阶段。 值越低,此容器启动得越早,停止得越晚。 默认值为Integer.MAX_VALUE,这意味着容器尽可能晚地启动并尽快停止。spring-doc.cadn.net.cn

刻度线
刻度线

possibleAuthenticationFailureFatal
(可能的身份验证失败致命的)spring-doc.cadn.net.cn

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

2.0 版本开始。spring-doc.cadn.net.cn

DirectMessageListenerContainerspring-doc.cadn.net.cn

当设置为false(默认),每个消费者将尝试根据monitorInterval.spring-doc.cadn.net.cn

SimpleMessageListenerContainerspring-doc.cadn.net.cn

当设置为false,重试 3 次后,容器将进入恢复模式,就像其他问题一样,例如代理关闭。 容器将尝试根据recoveryInterval财产。 在每次恢复尝试期间,每个使用者将再次尝试 4 次启动。 这一过程将无限期地持续下去。spring-doc.cadn.net.cn

您还可以使用属性 bean 为所有容器全局设置属性,如下所示:spring-doc.cadn.net.cn

<util:properties
    id="spring.amqp.global.properties">
  <prop
    key="mlc.possible.authentication.failure.fatal">
     false
  </prop>
</util:properties>

此全局属性不会应用于任何具有显式missingQueuesFatal属性集。spring-doc.cadn.net.cn

默认重试属性(以 5 秒为间隔重试 3 次)可以使用此属性之后的属性进行覆盖。spring-doc.cadn.net.cn

刻度线
刻度线

prefetchCount
(预取)spring-doc.cadn.net.cn

每个使用者可能未完成的未确认消息数。 此值越高,消息的传递速度越快,但非顺序处理的风险就越高。 如果acknowledgeModeNONE. 如有必要,会增加此值以匹配batchSizemessagePerAck. 从 2.0 开始默认为 250。 您可以将其设置为 1 以恢复到以前的行为。spring-doc.cadn.net.cn

在某些情况下,预提取值应 be low — 例如,对于大消息,尤其是在处理速度较慢的情况下(消息可能会加起来 到客户端进程中的大量内存),以及是否需要严格的消息排序 (在这种情况下,预取值应设置回 1)。 此外,对于低容量消息传递和多个使用者(包括单个侦听器容器实例中的并发性),您可能希望减少预取,以便在使用者之间获得更均匀的消息分布。

另请参阅globalQos.spring-doc.cadn.net.cn

刻度线
刻度线

rabbitAdmin
(管理员)spring-doc.cadn.net.cn

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

刻度线
刻度线

receiveTimeout
(接收超时)spring-doc.cadn.net.cn

等待每条消息的最长时间。 如果acknowledgeMode=NONE,这几乎没有影响——容器旋转并请求另一条消息。 它对事务性的影响最大ChannelbatchSize > 1,因为它可能导致在超时到期之前不会确认已使用的消息。 什么时候consumerBatchEnabled为 true,则如果在批处理完成之前发生此超时,则将交付部分批处理。spring-doc.cadn.net.cn

刻度线

batchReceiveTimeout
(批量接收超时)spring-doc.cadn.net.cn

收集批处理消息的超时毫秒数。它限制等待填充 batchSize 的时间。 什么时候batchSize > 1并且收集批处理消息的时间大于batchReceiveTime,批次将被交付。默认值为 0(无超时)。spring-doc.cadn.net.cn

刻度线

recoveryBackOff
(恢复-回退)spring-doc.cadn.net.cn

指定BackOff如果使用者因非致命原因无法启动,则尝试启动使用者之间的间隔。默认值为FixedBackOff每五秒无限重试一次。 相互排斥recoveryInterval.spring-doc.cadn.net.cn

刻度线
刻度线

recoveryInterval
(恢复间隔)spring-doc.cadn.net.cn

确定尝试启动使用者之间的时间(以毫秒为单位)(如果使用者因非致命原因而无法启动)。 默认值:5000。 相互排斥recoveryBackOff.spring-doc.cadn.net.cn

刻度线
刻度线

retryDeclarationInterval
(缺少队列- 重试间隔)spring-doc.cadn.net.cn

如果在使用者初始化期间配置的队列子集可用,则使用者将开始从这些队列使用。 使用者尝试使用此间隔被动声明缺少的队列。 当此间隔过去时,将再次使用“declarationRetries”和“failedDeclarationRetryInterval”。 如果仍然缺少队列,使用者会再次等待此间隔,然后再重试。 此过程无限期地持续,直到所有队列都可用。 默认值:60000(一分钟)。spring-doc.cadn.net.cn

刻度线

shutdownTimeout
(不适用)spring-doc.cadn.net.cn

当容器关闭时(例如, 如果它包含ApplicationContext关闭),它会等待处理中消息达到此限制。 默认为 5 秒。spring-doc.cadn.net.cn

刻度线
刻度线

startConsumerMinInterval
(最小启动间隔)spring-doc.cadn.net.cn

按需启动每个新使用者之前必须经过的时间(以毫秒为单位)。 请参阅侦听器并发。 默认值:10000(10 秒)。spring-doc.cadn.net.cn

刻度线

statefulRetryFatal
WithNullMessageId (不适用)spring-doc.cadn.net.cn

使用有状态重试建议时,如果缺少messageId财产收到,则被视为 默认情况下,对消费者来说是致命的(它已停止)。 将此设置为false丢弃(或路由到死信队列)此类消息。spring-doc.cadn.net.cn

刻度线
刻度线

stopConsumerMinInterval
(最小停止间隔)spring-doc.cadn.net.cn

在检测到空闲使用者时停止最后一个使用者后,使用者停止之前必须经过的时间(以毫秒为单位)。 请参阅侦听器并发。 默认值:60000(一分钟)。spring-doc.cadn.net.cn

刻度线

streamConverter
(不适用)spring-doc.cadn.net.cn

一个StreamMessageConverter将本机 Stream 消息转换为 Spring AMQP 消息。spring-doc.cadn.net.cn

刻度线

taskExecutor
(任务执行器)spring-doc.cadn.net.cn

对弹簧的引用TaskExecutor(或标准 JDK 1.5+Executor) 用于执行侦听器调用器。 默认值为SimpleAsyncTaskExecutor,使用内部管理的线程。spring-doc.cadn.net.cn

刻度线
刻度线

taskScheduler
(任务调度程序)spring-doc.cadn.net.cn

对于 DMLC,调度程序用于在“monitorInterval”运行监视任务。spring-doc.cadn.net.cn

刻度线

transactionManager
(事务管理器)spring-doc.cadn.net.cn

用于侦听器作的外部事务管理器。 也与channelTransacted— 如果Channel,其事务将与外部事务同步。spring-doc.cadn.net.cn

刻度线
刻度线