Message Listener Container Configuration
有很多选择用于配置与事务和服务质量相关的 SimpleMessageListenerContainer
(SMLC)和 DirectMessageListenerContainer
(DMLC),并且一些选择会相互作用。应用于 SMLC、DMLC 或 StreamListenerContainer
(StLC)的属性(请参见 Using the RabbitMQ Stream Plugin)由相应列中的复选标记表示。请参见 Choosing a Container,以获取帮助您确定哪个容器适合您的应用程序的信息。
下表显示了容器属性名称及其等效属性名称(括号内),其中使用命名空间配置 <rabbit:listener-container/>
时。该元素上的 type
属性可以是 simple
(默认)或 direct
,分别指定 SMLC
或 DMLC
。命名空间不公开某些属性。这些属性由属性的 N/A
表示。
Property (Attribute) |
Description |
SMLC |
DMLC |
StLC |
当 |
image::tickmark.png[] |
|||
[id="acknowledgeMode"]<<`acknowledgeMode`,acknowledgeMode>> (acknowledge) |
* |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="adviceChain"]<<`adviceChain`,adviceChain>> (advice-chain) |
要应用到监听器执行的 AOP 建议的数组。可用于应用其他横切关注点,例如在代理死亡时自动重试。请注意,AMQP 错误后的简单重新连接由 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="afterReceivePostProcessors"]<<`afterReceivePostProcessors`,afterReceivePostProcessors>> (N/A) |
在调用监听器之前调用的 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="alwaysRequeueWithTxManagerRollback"]<<`alwaysRequeueWithTxManagerRollback`,alwaysRequeueWithTxManagerRollback>> (N/A) |
如果配置了事务管理器,则在回滚时设置为 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="autoDeclare"]<<`autoDeclare`,autoDeclare>> (auto-declare) |
当设为 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="autoStartup"]<<`autoStartup`,autoStartup>> (auto-startup) |
指示容器应在 |
image::tickmark.png[] |
image::tickmark.png[] |
image::tickmark.png[] |
[id="batchSize"]<<`batchSize`,batchSize>> (transaction-size) (batch-size) |
当与设置为 |
image::tickmark.png[] |
||
[id="batchingStrategy"]<<`batchingStrategy`,batchingStrategy>> (N/A) |
对消息进行解除批处理时使用的策略。默认值 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="channelTransacted"]<<`channelTransacted`,channelTransacted>> (channel-transacted) |
布尔标志,表示应在事务中确认所有消息(手动或自动)。 |
image::tickmark.png[] |
image::tickmark.png[] |
|
|
image::tickmark.png[] |
|||
[id="concurrentConsumers"]<<`concurrentConsumers`,concurrentConsumers>> (concurrency) |
为每个侦听器最初启动的并行使用者数量。请参阅 Listener Concurrency。对于 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="connectionFactory"]<<`connectionFactory`,connectionFactory>> (connection-factory) |
对 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="consecutiveActiveTrigger"]<<`consecutiveActiveTrigger`,consecutiveActiveTrigger>> (min-consecutive-active) |
在考虑启动新的使用者时,使用者收到的连续消息的最小数量(不发生接受超时)。也受“batchSize”影响。请参阅 Listener Concurrency。默认值:10。 |
image::tickmark.png[] |
||
[id="consecutiveIdleTrigger"]<<`consecutiveIdleTrigger`,consecutiveIdleTrigger>> (min-consecutive-idle) |
使用者必须经历的最小接受超时次数,然后考虑停止使用者。也受“batchSize”影响。请参阅 Listener Concurrency。默认值:10。 |
image::tickmark.png[] |
||
[id="consumerBatchEnabled"]<<`consumerBatchEnabled`,consumerBatchEnabled>> (batch-enabled) |
如果 |
image::tickmark.png[] |
||
[id="consumerCustomizer"]<<`consumerCustomizer`,consumerCustomizer>> (N/A) |
由容器创建的流消费者的 |
image::tickmark.png[] |
||
[id="consumerStartTimeout"]<<`consumerStartTimeout`,consumerStartTimeout>> (N/A) |
让使用者线程启动的等待时间,单位为毫秒。如果超过此时间,将写一条错误日志。此问题可能会发生的一个示例是,如果配置的 |
image::tickmark.png[] |
||
[id="consumerTagStrategy"]<<`consumerTagStrategy`,consumerTagStrategy>> (consumer-tag-strategy) |
设置 ConsumerTagStrategy 的实现,启用为每个使用者创建(唯一)标签。 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="consumersPerQueue"]<<`consumersPerQueue`,consumersPerQueue>> (consumers-per-queue) |
为每个配置队列创建的使用者数量。请参阅 Listener Concurrency。 |
image::tickmark.png[] |
||
在 |
image::tickmark.png[] |
image::tickmark.png[] |
||
[id="debatchingEnabled"]<<`debatchingEnabled`,debatchingEnabled>> (N/A) |
为 true 时,侦听器容器将对批处理消息进行解除批处理,并使用批处理中的每条消息调用侦听器。从 2.2.7 版开始,如果侦听器是 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="declarationRetries"]<<`declarationRetries`,declarationRetries>> (declaration-retries) |
被动队列声明失败时的重试次数。被动队列声明在使用者启动时发生,或者在从多个队列使用时,在初始化期间并非所有队列都可用时发生。当在重试耗尽后无法被动声明(由于任何原因)任何已配置的队列时,容器行为由前面描述的“missingQueuesFatal`属性控制。默认值:三次重试(总共四次尝试)。 |
image::tickmark.png[] |
||
[id="defaultRequeueRejected"]<<`defaultRequeueRejected`,defaultRequeueRejected>> (requeue-rejected) |
判别是否重新排队由于侦听器抛出异常而被拒绝的消息。默认值: |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="errorHandler"]<<`errorHandler`,errorHandler>> (error-handler) |
引用`ErrorHandler`策略来处理消息侦听器执行期间可能发生的任何未捕获异常。默认值: |
image::tickmark.png[] |
image::tickmark.png[] |
|
判别此容器中的单个消费者是否有对队列的独占访问权。当独占访问权为`true`时,容器的并发性必须为 1。如果其他消费者具有独占访问权,容器会尝试根据`recovery-interval`或`recovery-back-off`恢复消费者。当使用命名空间时,此属性会与队列名称一同出现在`<rabbit:listener/>`元素上。默认值: |
image::tickmark.png[] |
image::tickmark.png[] |
||
[id="exclusiveConsumerExceptionLogger"]<<`exclusiveConsumerExceptionLogger`,exclusiveConsumerExceptionLogger>> (N/A) |
独占消费者无法访问队列时使用的异常记录器。默认情况下,这会在`WARN`级别记录。 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="failedDeclarationRetryInterval"]<<`failedDeclarationRetryInterval`,failedDeclarationRetryInterval>> (failed-declaration -retry-interval) |
重复进行被动队列申报尝试之间的间隔。被动队列申报发生在消费者启动时,或在从多个队列进行消费但所有队列在初始化期间不可用时。默认值:5000(五秒)。 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="forceCloseChannel"]<<`forceCloseChannel`,forceCloseChannel>> (N/A) |
如果消费者在`shutdownTimeout`内未响应关闭操作,如果这是`true`,通道会关闭,从而导致所有未确认的消息被重新排队。自 2.0 起,默认值为`true`。可以将其设置为`false`以还原为之前的行为。 |
image::tickmark.png[] |
image::tickmark.png[] |
|
设为 true 以在处理完当前记录后停止(当容器停止时);导致所有预提取的消息被重新排队。默认情况下,容器将在停止之前取消消费者并处理所有预提取的消息。自版本 2.4.14、3.0.6 开始。默认值: |
image::tickmark.png[] |
image::tickmark.png[] |
||
为 true 时, |
image::tickmark.png[] |
image::tickmark.png[] |
||
(group) |
仅在使用命名空间时才提供。当指定时,将使用此名称注册`Collection<MessageListenerContainer>`类型的 Bean,并且每个`<listener/>`元素的容器会添加到该集合中。这允许通过迭代集合来启动和停止容器组。如果多个`<listener-container/>`元素具有相同组值,则集合中的容器将形成所有指定容器的聚合。 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="idleEventInterval"]<<`idleEventInterval`,idleEventInterval>> (idle-event-interval) |
image::tickmark.png[] |
image::tickmark.png[] |
||
[id="javaLangErrorHandler"]<<`javaLangErrorHandler`,javaLangErrorHandler>> (N/A) |
|
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="maxConcurrentConsumers"]<<`maxConcurrentConsumers`,maxConcurrentConsumers>> (max-concurrency) |
如果需要,按需启动的最大并行使用者数。必须大于或等于“concurrentConsumers”。请参阅 Listener Concurrency。 |
image::tickmark.png[] |
||
[id="messagesPerAck"]<<`messagesPerAck`,messagesPerAck>> (N/A) |
确认之间接收消息的数量。使用此项可减少发送到代理的确认数(以增加重新交付消息的可能性为代价)。通常,仅应在高容量侦听器容器上设置此属性。如果设置此属性并拒绝消息(抛出异常),则会确认待处理的确认,并拒绝失败的消息。在事务通道中不允许这样做。如果`prefetchCount`小于`messagesPerAck`,则将其增加到与`messagesPerAck`匹配。默认值:对每条消息进行确认。另请参阅此表中的`ackTimeout`。 |
image::tickmark.png[] |
||
[id="mismatchedQueuesFatal"]<<`mismatchedQueuesFatal`,mismatchedQueuesFatal>> (mismatched-queues-fatal) |
如果此属性在容器启动时为 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="missingQueuesFatal"]<<`missingQueuesFatal`,missingQueuesFatal>> (missing-queues-fatal) |
当设置为 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="monitorInterval"]<<`monitorInterval`,monitorInterval>> (monitor-interval) |
使用 DMLC,计划在该间隔内调度一个任务,以监视消费者的状态并恢复任何失败的使用者。 |
image::tickmark.png[] |
||
设置为 |
image::tickmark.png[] |
image::tickmark.png[] |
||
当 |
image::tickmark.png[] |
image::tickmark.png[] |
||
[id="possibleAuthenticationFailureFatal"]<<`possibleAuthenticationFailureFatal`,possibleAuthenticationFailureFatal>> (possible-authentication-failure-fatal) |
当设置为 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="prefetchCount"]<<`prefetchCount`,prefetchCount>> (prefetch) |
每个消费者等待处理的未确认消息数目。此值越大,发送消息的速度越快,但非顺序处理的风险越高。如果 |
image::tickmark.png[] |
image::tickmark.png[] |
|
侦听器容器侦听至少一个自动删除队列,并且在启动期间找不到该队列时,容器会使用 |
image::tickmark.png[] |
image::tickmark.png[] |
||
[id="receiveTimeout"]<<`receiveTimeout`,receiveTimeout>> (receive-timeout) |
为每个消息等待的最长时间。如果 |
image::tickmark.png[] |
||
[id="batchReceiveTimeout"]<<`batchReceiveTimeout`,batchReceiveTimeout>> (batch-receive-timeout) |
为收集批处理消息而超时的小时数。它限制了填充 batchSize 的等待时间。当 |
image::tickmark.png[] |
||
[id="recoveryBackOff"]<<`recoveryBackOff`,recoveryBackOff>> (recovery-back-off) |
指定 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="recoveryInterval"]<<`recoveryInterval`,recoveryInterval>> (recovery-interval) |
确定如果使用者因非致命原因启动失败时,尝试启动使用者的间隔时间(毫秒)。默认值:5000。与 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="retryDeclarationInterval"]<<`retryDeclarationInterval`,retryDeclarationInterval>> (missing-queue- retry-interval) |
如果在使用者初始化期间存在一部分已配置队列,则使用者开始消耗这些队列中的消息。使用者尝试使用此间隔被动声明丢失的队列。当此间隔过去时,“declarationRetries”和“failedDeclarationRetryInterval”将再次使用。如果仍有丢失的队列,则使用者再次等待此间隔然后再重试。此过程无限地继续,直到所有队列都可用。默认值:60000(一分钟)。 |
image::tickmark.png[] |
||
[id="shutdownTimeout"]<<`shutdownTimeout`,shutdownTimeout>> (N/A) |
当某个容器关闭时(例如,如果其封闭的 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="startConsumerMinInterval"]<<`startConsumerMinInterval`,startConsumerMinInterval>> (min-start-interval) |
必须经过的毫秒数,然后根据需求启动每个新消费者。请参阅 Listener Concurrency。默认值:10000(10 秒)。 |
image::tickmark.png[] |
||
[id="statefulRetryFatal"]<<`statefulRetryFatal`,statefulRetryFatal>> WithNullMessageId (N/A) |
在使用有状态重试建议时,如果收到一条缺少 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="stopConsumerMinInterval"]<<`stopConsumerMinInterval`,stopConsumerMinInterval>> (min-stop-interval) |
在检测到空闲消费者之前,从停止上一个消费者以来必需经过的毫秒数。请参阅 Listener Concurrency。默认值:60000(一分钟)。 |
image::tickmark.png[] |
||
[id="streamConverter"]<<`streamConverter`,streamConverter>> (N/A) |
一个 |
image::tickmark.png[] |
||
[id="taskExecutor"]<<`taskExecutor`,taskExecutor>> (task-executor) |
一个对 Spring |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="taskScheduler"]<<`taskScheduler`,taskScheduler>> (task-scheduler) |
借助 DMLC,调度程序以“monitorInterval”运行监控任务。 |
image::tickmark.png[] |
||
[id="transactionManager"]<<`transactionManager`,transactionManager>> (transaction-manager) |
操作监听器的外部事务管理器。也补充 |
image::tickmark.png[] |
image::tickmark.png[] |