对于最新稳定版本,请使用Spring AMQP 4.0.0spring-doc.cadn.net.cn

Message Listener 容器配置

有不少配置选项可以配置SimpleMessageListenerContainer(SMLC)和一个DirectMessageListenerContainer(DMLC)与交易和服务质量相关,其中一些之间是相互交互的。 适用于SMLC、DMLC或StreamListenerContainer(StLC)(参见使用 RabbitMQ 流插件)在相应列中通过勾号表示。 请参阅“选择容器”一节,帮助您决定适合您应用的容器。spring-doc.cadn.net.cn

下表展示了使用命名空间配置<rabbit:listener-container/>. 这类型该元素的属性可以是简单(默认)或直接以指定一个单一商业中心DMLC分别。 有些属性不会被命名空间暴露。 这些用下式表示属性。spring-doc.cadn.net.cn

表1。消息监听器容器的配置选项
财产 (属性) 描述 单一商业中心 DMLC 圣地利克中心

ackTimeout
(无)spring-doc.cadn.net.cn

什么时候消息PerAck设置时,该超时被用作发送ACK的替代方式。 当有新消息到达时,未挂锁消息的数量会与消息PerAck,并将自上次确认以来的时间与该值进行比较。 如果任一条件true,信息已被确认。 当没有新消息到达且有未扣留的消息时,这个超时是近似的,因为条件只会检查一次monitorInterval. 参见消息PerAckmonitorInterval在这张表中。spring-doc.cadn.net.cn

勾号

承认模式
(确认)spring-doc.cadn.net.cn

  • 没有: 不发送 ack(与channelTransacted=真). RabbitMQ称之为“自动自动登录”,因为代理假设所有消息都已自动确认,无需消费者采取任何行动。spring-doc.cadn.net.cn

  • 手动:监听者必须通过呼叫确认所有消息Channel.basicAck().spring-doc.cadn.net.cn

  • 自动:容器会自动确认消息,除非消息监听器抛出一个例外。 注意承认模式与 是互补的频道交易——如果通道被交易,代理除了ACK外,还要求提交通知。 这是默认模式。 参见批量大小.spring-doc.cadn.net.cn

勾号
勾号

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

一系列适用于监听器执行的AOP建议。 这可用于应用额外的交叉切入关注点,例如经纪人死亡时自动重试。 注意,AMQP错误后的简单重新连接由缓存连接工厂,只要经纪人还活着。spring-doc.cadn.net.cn

勾号
勾号

afterReceivePostProcessors
(无)spring-doc.cadn.net.cn

一个数组消息后处理器在调用监听者之前被调用的实例。 后处理器可以实现优先订购命令. 阵列排序时,未排序的成员最后被调用。 如果后处理器返回,消息被丢弃(并在适当时确认)。spring-doc.cadn.net.cn

勾号
勾号

alwaysRequeueWithTxManagerRollback
(无)spring-doc.cadn.net.cn

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

勾号
勾号

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

当设置为true(默认情况下),容器使用一个兔子管理员如果AMQP在启动过程中检测到至少有一个队列缺失,可能因为它是自动删除或是队列已过期,但如果队列因任何原因缺失,重新声明仍会继续。 要禁用此行为,请将此属性设置为false. 注意,如果所有队列都缺失,容器就无法启动。spring-doc.cadn.net.cn

在1.6版本之前,如果上下文中有多个管理员,容器会随机选择一个。 如果没有管理员,内部就会生成一个管理员。 无论哪种情况,都可能带来意想不到的结果。 从1.6版本开始,对于自动声明要工作,必须有一个兔子管理员在上下文中,或者必须在容器上使用兔子管理员财产。
勾号
勾号

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

标记表示容器应当在应用上下文作为SmartLifecycle回调,即所有 BEANS 初始化后发生的)。 默认true,但你可以设置为false如果你的经纪人启动时可能无法接听,请致电开始()等你确定经纪人准备好了再手动作。spring-doc.cadn.net.cn

勾号
勾号
勾号

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

当与承认模式设置为自动容器会尝试处理最多这个数量的消息后再发送确认(等待每一条直到接收超时设置)。 这也是事务通道提交的时候。 如果预取计数小于批量大小,其值被增加以匹配批量大小.spring-doc.cadn.net.cn

勾号

批次策略
(无)spring-doc.cadn.net.cn

解散消息时所采用的策略。 违约简单去批次策略. 参见批处理@RabbitListener与批处理spring-doc.cadn.net.cn

勾号
勾号

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

布尔标志用于提示交易中所有消息都应被确认(无论是手动还是自动)。spring-doc.cadn.net.cn

勾号
勾号

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

M-N每个听众的同时用量范围(最小、最大)。 苟n提供,n是固定数量的消费者。 参见监听者并发spring-doc.cadn.net.cn

勾号

并发消费者
(并发)spring-doc.cadn.net.cn

每个听众最初开始的并发用户数量。 参见监听者并发。 对于圣地利克中心,并发通过 过载控制超级流方法;参见“使用单一活跃消费者的超级流消费”。spring-doc.cadn.net.cn

勾号
勾号

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

连接工厂. 在使用 XML 命名空间进行配置时,默认引用的 bean 名称为兔子连接工厂.spring-doc.cadn.net.cn

勾号
勾号

连续主动触发
(最小-连续-主动)spring-doc.cadn.net.cn

在考虑启动新用户时,消费者在未发生接收超时的情况下,连续接收的消息的最少数量。 同样受到“批量大小”的影响。 参见监听者并发。 默认值:10。spring-doc.cadn.net.cn

勾号

连续IdleTrigger
(最小-连续-闲置)spring-doc.cadn.net.cn

消费者在考虑停止该用户之前,必须经历的最低限度接收超时次数。 同样受到“批量大小”的影响。 参见监听者并发。 默认值:10。spring-doc.cadn.net.cn

勾号

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

如果消息监听器支持此功能,将此设置为 true,可以批量处理离散消息,最高可达批量大小;如果没有新消息到达,将部分批次送达收到超时或收集批处理消息的时间超过了batchReceiveTimeout. 当此为假时,批量处理仅支持生产者创建的批次;参见批处理。spring-doc.cadn.net.cn

勾号

consumerCustomizer
(无)spring-doc.cadn.net.cn

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

勾号

consumerStartTimeout
(无)spring-doc.cadn.net.cn

等待消费者线程启动所需的毫秒。 如果超过此时间,会写入错误日志。 一个可能发生这种情况的例子是 配置任务执行者线程不足以支撑容器并发消费者.spring-doc.cadn.net.cn

参见线程和异步消费者。 默认值:60000(一分钟)。spring-doc.cadn.net.cn

勾号

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

设置 ConsumerTagStrategy 的实现,使每个消费者能够创建(唯一)标签。spring-doc.cadn.net.cn

勾号
勾号

消费者按队列
(按排队的消费者数)spring-doc.cadn.net.cn

每个配置队列需要创建的消费者数量。 参见监听者并发spring-doc.cadn.net.cn

勾号

消耗延迟
(无)spring-doc.cadn.net.cn

使用 RabbitMQ 分片插件并发消费者 > 1存在一种竞态条件,可以阻止消费者在分片间均匀分布。 利用该性质在消费者启动之间增加小延迟,以避免该竞速条件。 你应该尝试不同的数值,确定适合你环境的延迟。spring-doc.cadn.net.cn

勾号
勾号

debatchingEnabled
(无)spring-doc.cadn.net.cn

当为真时,监听器容器会对批处理消息进行批次处理,并对批次中的每个消息调用监听器。 从2.2.7版本开始,生产者创建的批次将被解区为列表<消息>如果监听者是批处理消息监听器ChannelAwareBatchMessageListener. 否则,批次中的消息会一次呈现一条。 默认是true。 参见批处理@RabbitListener与批处理spring-doc.cadn.net.cn

勾号
勾号

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

被动队列声明失败时的重试次数。 被动队列声明发生在消费者开始时,或者在从多个队列中消费时,初始化时并非所有队列都可用。 当重试用尽后,任何配置队列都无法被动声明(无论出于何种原因),容器行为由缺失队列致命财产,前面描述的。 弃权:三次重试(共四次尝试)。spring-doc.cadn.net.cn

勾号

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

决定因监听者抛出异常而被拒绝的消息是否应重新排队。 违约:true.spring-doc.cadn.net.cn

勾号
勾号

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

错误处理程序用于处理在MessageListener执行过程中可能出现的任何未捕获异常的策略。 违约:条件拒绝错误处理spring-doc.cadn.net.cn

勾号
勾号

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

确定该容器中的单个消费者是否拥有对队列的独占访问权限。 当 满足时,容器的并发必须为 1true. 如果有其他消费者拥有独占访问权限,容器会根据恢复间隔恢复-后退. 使用命名空间时,该属性会出现在<兔子:听众/>元素以及队列名称。 违约:false.spring-doc.cadn.net.cn

勾号
勾号

exclusiveConsumerExceptionLogger
(无)spring-doc.cadn.net.cn

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

勾号
勾号

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

被动队列声明重试尝试之间的间隔。 被动队列声明发生在消费者开始时,或者在从多个队列中消费时,初始化时并非所有队列都可用。 默认值:5000(5秒)。spring-doc.cadn.net.cn

勾号
勾号

强制关闭频道
(无)spring-doc.cadn.net.cn

如果消费者对关闭没有反应,那就停机 Timeout,如果true,通道将被关闭,导致未锁定的消息被重新排队。 默认true自2.0版本起。 你可以设置为false恢复到之前的行为。spring-doc.cadn.net.cn

勾号
勾号

强制停止
(无)spring-doc.cadn.net.cn

在当前记录处理完毕后,将容器停止设置为true;导致所有预取消息重新排队。 默认情况下,容器会取消消费者并处理所有预取消息后才停止。 自2.4.14、3.0.6版本起 默认false.spring-doc.cadn.net.cn

勾号
勾号

globalQos
(全球质量化)spring-doc.cadn.net.cn

当为真时,预取计数是全局应用于频道,而非针对频道上的每个用户。 看basicQos.global更多信息请见。spring-doc.cadn.net.cn

勾号
勾号

(团体)spring-doc.cadn.net.cn

这只有在使用命名空间时才可用。 指定时,为Collection<MessageListenerContainer>注册时使用该名称,且 每种容器<听众/>元素被添加到集合中。 例如,这允许通过遍历集合来启动和停止容器组。 如果是多个<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当容器线程捕获错误. 默认实现调用System.exit(99);要恢复到之前的行为(什么都不做),可以添加一个无作处理程序。spring-doc.cadn.net.cn

勾号
勾号

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

按需启动的最大并发用户数量。 必须大于或等于“并发消费者”。 参见监听者并发spring-doc.cadn.net.cn

勾号

消息PerAck
(无)spring-doc.cadn.net.cn

确认之间需要接收的消息数量。 利用这一点减少发送给代理的确认次数(代价是增加邮件被重投的可能性)。 通常,你应该只在高容量监听器容器上设置这个属性。 如果设置了该请求且消息被拒绝(异常抛出),待确认确认并拒绝失败消息。 交易通道不允许。 如果预取计数小于消息PerAck,其值被增加以匹配消息PerAck. 默认:确认每条消息。 参见ackTimeout在这张表中。spring-doc.cadn.net.cn

勾号

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

当容器开始时,如果该性质为true(默认:false),容器检查上下文中所有声明的队列是否与代理上已有的队列兼容。 如果性质不匹配(例如自动删除)或参数(例如x-message-ttl)存在,容器(及应用上下文)因致命异常而无法启动。spring-doc.cadn.net.cn

如果在恢复过程中(例如断线后)检测到问题,容器将被停止。spring-doc.cadn.net.cn

一定有单一兔子管理员在应用上下文中(或通过使用容器中专门配置的上下文)兔子管理员财产)。 否则,该性质必须是false.spring-doc.cadn.net.cn

如果初次启动时经纪人无法使用,容器启动并在建立连接时检查条件。
检查是针对上下文中所有队列进行的,而不仅仅是特定监听器配置使用的队列。 如果你想限制检查只针对容器使用的队列,你应该单独配置一个兔子管理员对于容器,并通过以下方式提供对其的引用兔子管理员财产。 更多信息请参见有条件声明
在启动容器时,不匹配队列参数检测被禁用@RabbitListener在有标记的豆子里@Lazy. 这样做是为了避免可能出现僵局,从而延迟此类集装箱启动时间长达60秒。 使用懒惰监听豆的应用程序应在获得懒惰豆的引用前检查队列参数。
勾号
勾号

缺失队列致命
(失踪排队致死)spring-doc.cadn.net.cn

当设置为true(默认),如果配置的队列中没有任何队列在代理服务器上可用,则视为致命。 这会导致应用上下文在启动时未能初始化。 此外,当队列在容器运行时被删除,默认情况下,消费者会以五秒间隔三次尝试连接队列,如果尝试失败则停止容器。spring-doc.cadn.net.cn

在之前的版本中,这并不可配置。spring-doc.cadn.net.cn

当设置为false完成三次重试后,容器进入恢复模式,就像其他问题一样,比如代理故障。 容器会根据恢复间隔财产。 每次恢复尝试中,每个消费者都会尝试四次,每隔五秒被动宣告队列。 这一过程会无限期地持续下去。spring-doc.cadn.net.cn

你也可以用属性豆全局设置所有容器的属性,具体如下:spring-doc.cadn.net.cn

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

该全局性质不适用于任何具有显式缺失队列致命属性集。spring-doc.cadn.net.cn

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

在启动容器时,缺失队列检测会被禁用@RabbitListener在有标记的豆子里@Lazy. 这样做是为了避免可能出现僵局,从而延迟此类集装箱启动时间长达60秒。 使用懒惰监听豆的应用程序应在获得懒人豆的引用前检查队列。
勾号
勾号

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

使用DMLC,任务会在此间隔内运行,以监控消费者状态并恢复失败的任务。spring-doc.cadn.net.cn

勾号

无本地
(无)spring-doc.cadn.net.cn

设置为true以禁用服务器向消费者发送的消息,这些消息在同一频道的连接上发布。spring-doc.cadn.net.cn

勾号
勾号

阶段
(相位)spring-doc.cadn.net.cn

什么时候自动启动true,即该容器应开始和结束的生命周期阶段。 价值越低,该容器开始得越早,停止得越晚。 默认为Integer.MAX价值,意味着容器尽可能晚开始,尽快停止。spring-doc.cadn.net.cn

勾号
勾号

可能认证失败致命
(可能-认证失败-致命)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次重试后,容器会进入恢复模式,就像其他问题一样,比如代理服务器宕机。 容器将根据恢复间隔财产。 每次恢复尝试时,每位用户将再次尝试4次以启动。 这一过程将无限期持续。spring-doc.cadn.net.cn

你也可以用属性豆全局设置所有容器的属性,具体如下:spring-doc.cadn.net.cn

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

该全局性质不会应用于任何具有显式缺失队列致命属性集。spring-doc.cadn.net.cn

默认的重试属性(每隔5秒重试3次)可以用之后的属性来覆盖。spring-doc.cadn.net.cn

勾号
勾号

预取计数
(预接声)spring-doc.cadn.net.cn

每个用户可能未收到的未确认消息数量。 该值越高,消息传递速度越快,但非顺序处理的风险也越高。 如果承认模式没有. 如有需要,该比例会增加以匹配批量大小信息PerAck. 自2.0版本起默认为250。 你可以把它设为1,恢复到之前的行为。spring-doc.cadn.net.cn

在某些情况下,预取值应该是 要低——例如,对于大消息,尤其是处理缓慢(消息可能累积)时 客户端进程中占用大量内存),如果需要严格的消息顺序 (此时预取值应设回1。) 此外,在低流量消息和多消费者(包括单个监听器容器实例内的并发)情况下,你可能希望减少预取,以实现消息在消费者间更均匀分布。

另见globalQos.spring-doc.cadn.net.cn

勾号
勾号

兔子管理员
(行政)spring-doc.cadn.net.cn

当监听器容器监听至少一个自动删除队列,且在启动时发现缺失时,容器会使用兔子管理员声明队列及相关绑定和交换。 如果这些元素配置为使用条件声明(参见条件声明),容器必须使用被配置声明这些元素的管理员。 请在这里说明管理员身份。 只有在使用带有条件声明的自动删除队列时才需要。 如果你不希望在容器启动前声明自动删除队列,请设置自动启动false在管理员方面。 默认为兔子管理员该系统声明所有非条件元素。spring-doc.cadn.net.cn

勾号
勾号

收到超时
(接球暂停)spring-doc.cadn.net.cn

每条消息的最大等待时间。 如果acknowledgeMode=无这几乎没有影响——容器旋转并请求另一个消息。 它对交易型影响最大渠道批量大小> 1,因为它可能导致已处理的消息在超时结束前无法被确认。 什么时候consumerBatchEnabled成立,如果超时发生在批处理完成前,将送达部分批次。spring-doc.cadn.net.cn

勾号

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

收集批处理消息所需的毫秒超时数。 它限制了等待填充 batchSize 的时间。 什么时候批量大小> 1而收集批处理消息的时间也长于批量接收时间批次将送达。 默认值为0(无超时)。spring-doc.cadn.net.cn

勾号

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

指定了退避用于在尝试启动消费者之间,如果因非致命原因未能启动。 默认是固定退后每五秒无限次尝试。 互斥的恢复间隔.spring-doc.cadn.net.cn

勾号
勾号

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

确定如果因非致命原因未能启动,尝试启动之间的时间(毫秒)。 默认值:5000。 互斥的恢复退后.spring-doc.cadn.net.cn

勾号
勾号

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

如果在消费者初始化过程中有部分配置队列可用,消费者开始从这些队列中消费。 消费者尝试通过该区间被动声明缺失队列。 当该间隔结束时,'declarationRetries' 和 'failedDeclarationRetryInterval' 再次被使用。 如果仍有队列缺失,消费者再次等待该间隔后再尝试。 此过程无限期进行,直到所有队列可用。 默认值:60000(一分钟)。spring-doc.cadn.net.cn

勾号

停机 Timeout
(无)spring-doc.cadn.net.cn

当容器关闭时(例如, 如果是包围式的应用上下文它会等待飞行中消息处理到该限制。 默认是五秒。spring-doc.cadn.net.cn

勾号
勾号

startConsumerMinInterval
(分钟-起始-间隔)spring-doc.cadn.net.cn

每个新用户按需启动前必须经过的毫秒时间。 参见监听者并发。 默认值:10000(10秒)。spring-doc.cadn.net.cn

勾号

状态性重试致命
WithNullMessageID (无)spring-doc.cadn.net.cn

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

勾号
勾号

stopConsumerMinInterval
(分钟-停止-间隔)spring-doc.cadn.net.cn

自上一个消费者被检测到空闲用户后,必须经过的毫秒数。 参见监听者并发。 默认值:60000(一分钟)。spring-doc.cadn.net.cn

勾号

流转换器
(无)spring-doc.cadn.net.cn

一个流消息转换器将原生流消息转换为春季AMQP消息。spring-doc.cadn.net.cn

勾号

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

对泉水的致敬任务执行者(或标准JDK 1.5+执行者)用于执行监听调用者。 默认是SimpleAsyncTaskExecutor,使用内部管理的线程。spring-doc.cadn.net.cn

勾号
勾号

任务调度器
(任务调度器)spring-doc.cadn.net.cn

使用DMLC,调度器在“monitorInterval”执行监控任务。spring-doc.cadn.net.cn

勾号

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

用于监听器作的外部事务管理器。 也与频道交易——如果渠道交易时,其事务与外部事务同步。spring-doc.cadn.net.cn

勾号
勾号