配置与事务和服务质量相关的 (SMLC) 和 (DMLC) 选项有很多,其中一些选项可以相互交互。
适用于 SMLC、DMLC 或 (StLC) 的属性(请参阅使用 RabbitMQ 流插件)由相应列中的复选标记指示。
请参阅选择容器,以获取帮助您确定哪个容器适合您的应用程序的信息。SimpleMessageListenerContainer
DirectMessageListenerContainer
StreamListenerContainer
下表显示了使用命名空间配置 .
该元素的属性可以是 (默认) 或 分别指定 或。
命名空间不会公开某些属性。
这些由 for 属性表示。<rabbit:listener-container/>
type
simple
direct
SMLC
DMLC
N/A
财产 (属性) | 描述 | SMLC公司 | DMLC(英语:DMLC) | StLC公司 | ||||||
---|---|---|---|---|---|---|---|---|---|---|
|
设置后,此超时将用作发送 ack 的替代方法。
当新消息到达时,将未确认的消息计数与 进行比较,并将自上次确认以来的时间与此值进行比较。
如果任一条件为 ,则确认消息。
当没有新消息到达并且有未确认的消息时,此超时是近似值,因为每个 .
另请参阅此表中的 和 。 |
![]() |
||||||||
|
|
![]() |
![]() |
|||||||
|
应用于侦听器执行的 AOP 建议数组。
这可用于应用其他横切关注点,例如在代理死亡时自动重试。
请注意,只要代理还活着,AMQP 错误后的简单重新连接就由 处理。 |
![]() |
![]() |
|||||||
在调用侦听器之前调用的实例数组。
后处理器可以实现 或 .
数组使用最后调用的无序成员进行排序。
如果后处理器返回,则消息将被丢弃(并确认,如果适用)。 |
![]() |
![]() |
||||||||
设置为在配置事务管理器时始终在回滚时将邮件重新排队。 |
![]() |
![]() |
||||||||
|
当设置为 (默认) 时,如果容器检测到在启动期间至少缺少一个队列(可能是因为它是一个队列或一个过期的队列),则容器使用 a 重新声明所有 AMQP 对象(队列、交换、绑定),但如果队列因任何原因丢失,则重新声明将继续。
若要禁用此行为,请将此属性设置为 。
请注意,如果容器的所有队列都丢失,则容器将无法启动。
|
![]() |
![]() |
|||||||
|
标志以指示容器应在执行时启动(作为回调的一部分,在所有 Bean 初始化后发生)。
默认为 ,但您可以将其设置为 如果您的代理在启动时可能不可用,并在您知道代理已准备就绪时稍后手动调用。 |
![]() |
![]() |
![]() |
||||||
|
当与 set to 一起使用时,容器会在发送确认之前尝试处理最多此数量的消息(等待每条消息直到接收超时设置)。
这也是提交事务通道的时候。
如果 小于 ,则增加 以匹配 。 |
![]() |
||||||||
|
debatchng 消息时使用的策略。
违约。
请参阅批处理和批处理@RabbitListener。 |
![]() |
![]() |
|||||||
|
布尔标志,表示应在事务中确认所有消息(手动或自动)。 |
![]() |
![]() |
|||||||
|
|
![]() |
||||||||
每个侦听器最初启动的并发使用者数。
请参阅侦听器并发。
对于 ,并发通过重载方法进行控制;请参阅使用单个活动使用者使用超级流。 |
![]() |
![]() |
||||||||
|
对 .
使用 XML 命名空间进行配置时,缺省引用的 Bean 名称为 。 |
![]() |
![]() |
|||||||
|
在考虑启动新使用者时,使用者在不发生接收超时的情况下接收的最小连续消息数。 还受到“batchSize”的影响。 请参阅侦听器并发。 默认值:10。 |
![]() |
||||||||
|
使用者在考虑停止使用者之前必须经历的最小接收超时次数。 还受到“batchSize”的影响。 请参阅侦听器并发。 默认值:10。 |
![]() |
||||||||
|
如果支持,则将其设置为 true 将启用离散消息的批处理,最高可达 ;如果没有新消息到达或超过收集批处理消息的时间,则将传递部分批处理。
如果此值为 false,则仅对生产者创建的批处理支持批处理;请参阅批处理。 |
![]() |
||||||||
|
用于修改容器创建的流使用者的 Bean。 |
![]() |
||||||||
|
等待使用者线程启动的时间(以毫秒为单位)。
如果超过此时间,则会写入错误日志。
发生这种情况的一个示例是,如果配置的线程不足以支持容器。 请参阅线程和异步使用者。 默认值:60000(一分钟)。 |
![]() |
||||||||
|
设置 ConsumerTagStrategy 的实现,以便为每个使用者创建(唯一)标记。 |
![]() |
![]() |
|||||||
|
要为每个配置的队列创建的使用者数。 请参阅侦听器并发。 |
![]() |
||||||||
|
当将 RabbitMQ 分片插件与 一起使用时,存在一个争用条件,可以阻止消费者在分片之间均匀分布。
使用此属性可在使用者启动之间添加一个小延迟,以避免此争用条件。
您应该试验使用值来确定适合您的环境的延迟。 |
![]() |
![]() |
|||||||
|
如果为 true,侦听器容器将对批处理的消息进行批处理,并使用批处理中的每条消息调用侦听器。
从版本 2.2.7 开始,如果侦听器是 或 ,则生产者创建的批处理将作为 .
否则,批处理中的消息将一次显示一个。
默认值为 true。
请参阅批处理和批处理@RabbitListener。 |
![]() |
![]() |
|||||||
|
被动队列声明失败时的重试次数。 被动队列声明发生在使用者启动时,或者当从多个队列使用时,在初始化期间并非所有队列都可用时。 如果在重试耗尽后,任何已配置的队列都不能被动声明(出于任何原因),则容器行为由前面所述的“missingQueuesFatal”属性控制。 默认值:重试 3 次(总共 4 次尝试)。 |
![]() |
||||||||
|
确定是否应将因侦听器引发异常而被拒绝的邮件重新排队。
违约:。 |
![]() |
![]() |
|||||||
|
对用于处理 MessageListener 执行期间可能发生的任何未捕获异常的策略的引用。
违约: |
![]() |
![]() |
|||||||
|
确定此容器中的单个使用者是否具有对队列的独占访问权限。
当 时,容器的并发性必须为 1。
如果另一个使用者具有独占访问权限,则容器会尝试根据 或 恢复使用者。
使用命名空间时,此属性将与队列名称一起显示在元素上。
违约:。 |
![]() |
![]() |
|||||||
当独占使用者无法获得对队列的访问权限时使用的异常记录器。
默认情况下,这是在级别上记录的。 |
![]() |
![]() |
||||||||
|
被动队列声明重试尝试之间的间隔。 被动队列声明发生在使用者启动时,或者当从多个队列使用时,在初始化期间并非所有队列都可用时。 默认值:5000(5 秒)。 |
![]() |
![]() |
|||||||
|
如果使用者没有响应 中的关闭,如果是 ,则通道将被关闭,导致任何未确认的消息重新排队。
默认为 2.0 起。
您可以将其设置为还原到以前的行为。 |
![]() |
![]() |
|||||||
|
设置为 true 以在处理当前记录后停止(当容器停止时);导致所有预取的邮件重新排队。
默认情况下,容器将取消使用者,并在停止之前处理所有预取消息。
从版本 2.4.14、3.0.6 开始
默认值为 。 |
![]() |
![]() |
|||||||
|
如果为 true,则全局应用于渠道,而不是渠道上的每个使用者。
有关详细信息,请参阅 |
![]() |
![]() |
|||||||
(群展) |
这仅在使用命名空间时可用。
指定后,将使用此名称注册 Bean 类型,并且
每个元素的容器将添加到集合中。
例如,这允许通过循环访问集合来启动和停止容器组。
如果多个元素具有相同的组值,则集合中的容器将形成
如此指定的所有容器的总和。 |
![]() |
![]() |
|||||||
|
请参阅检测空闲异步使用者。 |
![]() |
![]() |
|||||||
|
当容器线程捕获 .
默认实现调用;若要恢复到以前的行为(不执行任何操作),请添加一个 no-op 处理程序。 |
![]() |
![]() |
|||||||
|
如果需要,按需启动的最大并发使用者数。 必须大于或等于“concurrentConsumers”。 请参阅侦听器并发。 |
![]() |
||||||||
|
确认器之间要接收的消息数。
使用它来减少发送到代理的 ack 数量(代价是增加重新传递消息的可能性)。
通常,应仅在大容量侦听器容器上设置此属性。
如果设置了此设置并拒绝消息(引发异常),则将确认挂起的确认并拒绝失败的消息。
不允许使用交易频道。
如果 小于 ,则增加 以匹配 。
默认值:ack 每条消息。
另请参阅此表。 |
![]() |
||||||||
|
当容器启动时,如果此属性为 (default: ),则容器会检查上下文中声明的所有队列是否与代理上已有的队列兼容。
如果存在不匹配的属性(如 )或参数(skuch as ),则容器(和应用程序上下文)无法启动并出现致命异常。 如果在恢复过程中检测到问题(例如,在失去连接后),则容器将停止。 应用程序上下文中必须有一个(或使用该属性在容器上专门配置的单个)。
否则,此属性必须为 。
|
![]() |
![]() |
|||||||
|
当设置为 (缺省值) 时,如果代理上没有配置的队列可用,则将其视为致命队列。
这会导致应用程序上下文在启动期间无法初始化。
此外,在容器运行时删除队列时,默认情况下,使用者会重试三次以连接到队列(间隔为 5 秒),并在这些尝试失败时停止容器。 这在以前的版本中是不可配置的。 当设置为 时,在进行三次重试后,容器将进入恢复模式,就像其他问题一样,例如代理已关闭。
容器尝试根据属性进行恢复。
在每次恢复尝试期间,每个使用者都会再次尝试四次,以五秒的间隔被动声明队列。
这个过程无限期地继续下去。 您还可以使用属性 Bean 全局设置所有容器的属性,如下所示:
此全局属性不应用于具有显式属性集的任何容器。 可以通过设置以下属性来覆盖默认重试属性(以 5 秒的间隔重试 3 次)。
|
![]() |
![]() |
|||||||
|
使用 DMLC,计划在此时间间隔运行任务,以监视使用者的状态并恢复任何失败的任务。 |
![]() |
||||||||
|
设置为禁用从服务器向使用者传递在同一通道连接上发布的邮件。 |
![]() |
![]() |
|||||||
|
当 是 时,此容器应启动和停止的生命周期阶段。
该值越低,此容器启动得越早,停止得越晚。
默认值为 ,表示容器尽可能晚启动并尽快停止。 |
![]() |
![]() |
|||||||
|
当设置为(SMLC 的默认值)时,如果在连接过程中抛出 a,则将其视为致命。
这会导致应用程序上下文在启动期间无法初始化(如果容器配置了自动启动)。 从 2.0 版开始。 DirectMessageListenerContainer 当设置为 (default) 时,每个使用者将尝试根据 . SimpleMessageListenerContainer 当设置为 时,在进行 3 次重试后,容器将进入恢复模式,就像其他问题一样,例如代理已关闭。
容器将尝试根据属性进行恢复。
在每次恢复尝试期间,每个使用者将再次尝试 4 次以启动。
这一过程将无限期地持续下去。 您还可以使用属性 Bean 全局设置所有容器的属性,如下所示:
此全局属性不会应用于具有显式属性集的任何容器。 可以使用此属性之后的属性覆盖默认重试属性(以 5 秒的间隔重试 3 次)。 |
![]() |
![]() |
|||||||
|
每个使用者处可能未确认的未确认消息数。
此值越高,消息传递速度越快,但非顺序处理的风险就越高。
如果 是 ,则忽略 。
如有必要,将增加此值以匹配 或 。
自 2.0 起默认为 250。
您可以将其设置为 1 以恢复到以前的行为。
另请参见。 |
![]() |
![]() |
|||||||
|
当侦听器容器侦听至少一个自动删除队列,并且在启动过程中发现该队列丢失时,容器将使用 a 声明队列以及任何相关的绑定和交换。
如果此类元素配置为使用条件声明(请参阅条件声明),则容器必须使用配置为声明这些元素的管理员。
在此处指定该管理员。
仅当使用带有条件声明的自动删除队列时,才需要它。
如果不希望在容器启动之前声明自动删除队列,请设置为 on the admin。
默认为声明所有非条件元素的 a。 |
![]() |
![]() |
|||||||
|
等待每条消息的最长时间。
如果 ,这几乎没有影响 - 容器旋转并请求另一条消息。
它对事务 with 的影响最大,因为它可能导致在超时到期之前不确认已消耗的消息。
如果为 true,则如果此超时发生在批处理完成之前,则将交付部分批处理。 |
![]() |
||||||||
|
收集批处理消息的超时毫秒数。
它限制了等待填充 batchSize 的时间。
当收集批处理消息的时间大于 时,将交付批处理。
默认值为 0(无超时)。 |
![]() |
||||||||
|
指定尝试启动使用者(如果使用者因非致命原因无法启动)之间的间隔。
默认值为每 5 秒无限次重试。
与 互斥。 |
![]() |
![]() |
|||||||
|
确定尝试启动使用者之间的时间(以毫秒为单位),如果使用者因非致命原因无法启动。
默认值:5000。
与 互斥。 |
![]() |
![]() |
|||||||
|
如果在使用者初始化期间配置的队列的子集可用,则使用者将从这些队列开始使用。 使用者尝试使用此间隔被动声明缺少的队列。 当此间隔过后,将再次使用“declarationRetries”和“failedDeclarationRetryInterval”。 如果仍然缺少队列,使用者将再次等待此间隔,然后再重试。 此过程无限期地继续,直到所有队列都可用。 默认值:60000(一分钟)。 |
![]() |
||||||||
|
当容器关闭时(例如,
如果其封闭),则等待传输中的消息被处理到此限制。
默认值为 5 秒。 |
![]() |
![]() |
|||||||
|
按需启动每个新使用者之前必须经过的时间(以毫秒为单位)。 请参阅侦听器并发。 默认值:10000(10 秒)。 |
![]() |
||||||||
|
使用有状态重试建议时,如果收到缺少属性的消息,则会将其视为
默认情况下,对使用者来说是致命的(它已停止)。
将此项设置为放弃(或路由到死信队列)此类消息。 |
![]() |
![]() |
|||||||
|
自检测到空闲使用者时,自最后一个使用者停止以来,在停止使用者之前必须经过的时间(以毫秒为单位)。 请参阅侦听器并发。 默认值:60000(一分钟)。 |
![]() |
||||||||
|
将本机 Stream 消息转换为 Spring AMQP 消息。 |
![]() |
||||||||
|
对用于执行侦听器调用程序的 Spring(或标准 JDK 1.5+)的引用。
默认值为 ,使用内部管理的线程。 |
![]() |
![]() |
|||||||
|
使用 DMLC,调度程序用于在“monitorInterval”运行监视任务。 |
![]() |
||||||||
|
用于侦听器操作的外部事务管理器。
此外,如果交易已完成,则其交易将与外部交易同步。 |
![]() |
![]() |
在版本 1.6 之前,如果上下文中有多个管理员,则容器将随机选择一个管理员。
如果没有管理员,它将在内部创建一个管理员。
无论哪种情况,这都可能导致意外结果。
从版本 1.6 开始,要使工作正常工作,上下文中必须有一个,或者必须使用该属性在容器上配置对特定实例的引用。autoDeclare RabbitAdmin rabbitAdmin |
如果代理在初始启动期间不可用,那么容器将启动,并在建立连接时检查条件。 |
检查是针对上下文中的所有队列完成的,而不仅仅是特定侦听器配置为使用的队列。
如果希望将检查限制为容器使用的队列,则应为容器配置单独的队列,并使用该属性提供对容器的引用。
有关详细信息,请参阅条件声明。RabbitAdmin rabbitAdmin |
在标记为 的 Bean 中启动容器时,禁用不匹配的队列参数检测。
这是为了避免潜在的死锁,这种死锁可能会将此类容器的启动延迟长达 60 秒。
使用惰性侦听器 Bean 的应用程序在获取对惰性 Bean 的引用之前,应检查队列参数。@RabbitListener @Lazy |
在标记为 的 Bean 中启动容器时,将禁用缺少队列检测。
这是为了避免潜在的死锁,这种死锁可能会将此类容器的启动延迟长达 60 秒。
使用惰性侦听器 Bean 的应用程序应在获取对惰性 Bean 的引用之前检查队列。@RabbitListener @Lazy |
在某些情况下,预回迁值应 要低 - 例如,对于大型消息,尤其是在处理速度较慢的情况下(消息可能会加起来 到客户端进程中的大量内存),以及是否需要严格的消息排序 (在这种情况下,预取值应设置回 1)。 此外,对于低容量消息传递和多个使用者(包括单个侦听器容器实例中的并发性),您可能希望减少预取,以便在使用者之间更均匀地分配消息。 |