消息监听器容器配置
SimpleMessageListenerContainer
(SMLC) 和 DirectMessageListenerContainer
(DMLC) 有许多与事务和服务质量相关的配置选项,其中一些选项会相互影响。
适用于 SMLC、DMLC 或 StreamListenerContainer
(StLC) 的属性(请参阅 使用 RabbitMQ Stream 插件)在相应列中以复选标记表示。
有关帮助您决定哪种容器适合您的应用程序的信息,请参阅 选择容器。
下表显示了容器属性名称及其等效的属性名称(括号中),在使用命名空间配置 <rabbit:listener-container/>
时。
该元素上的 type
属性可以是 simple
(默认)或 direct
,分别指定 SMLC
或 DMLC
。
某些属性未通过命名空间公开。
这些属性的属性值显示为 N/A
。
属性 (属性) |
描述 |
SMLC |
DMLC |
StLC |
[id="ackTimeout"][id="ackTimeout"][id="ackTimeout"]<<`ackTimeout`,ackTimeout>> (N/A) |
当设置了 |
image::tickmark.png[] |
||
[id="acknowledgeMode"][id="acknowledgeMode"][id="acknowledgeMode"]<<`acknowledgeMode`,acknowledgeMode>> (acknowledge) |
* |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="adviceChain"][id="adviceChain"][id="adviceChain"]<<`adviceChain`,adviceChain>> (advice-chain) |
一个 AOP Advice 数组,用于应用于监听器执行。
这可用于应用额外的横切关注点,例如在代理死亡时自动重试。
请注意,只要代理仍然存活, |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="afterReceivePostProcessors"][id="afterReceivePostProcessors"][id="afterReceivePostProcessors"]<<`afterReceivePostProcessors`,afterReceivePostProcessors>> (N/A) |
一个 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="alwaysRequeueWithTxManagerRollback"][id="alwaysRequeueWithTxManagerRollback"][id="alwaysRequeueWithTxManagerRollback"]<<`alwaysRequeueWithTxManagerRollback`,alwaysRequeueWithTxManagerRollback>> (N/A) |
当配置了事务管理器时,设置为 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="autoDeclare"][id="autoDeclare"][id="autoDeclare"]<<`autoDeclare`,autoDeclare>> (auto-declare) |
当设置为 NOTE: 在版本 1.6 之前,如果上下文中存在多个 admin,容器将随机选择一个。
如果没有 admin,它将在内部创建一个。
在任何一种情况下,这都可能导致意外结果。
从版本 1.6 开始,要使 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="autoStartup"][id="autoStartup"][id="autoStartup"]<<`autoStartup`,autoStartup>> (auto-startup) |
标志,指示容器应在 |
image::tickmark.png[] |
image::tickmark.png[] |
image::tickmark.png[] |
[id="batchSize"][id="batchSize"][id="batchSize"]<<`batchSize`,batchSize>> (transaction-size) (batch-size) |
当与 |
image::tickmark.png[] |
||
[id="batchingStrategy"][id="batchingStrategy"][id="batchingStrategy"]<<`batchingStrategy`,batchingStrategy>> (N/A) |
消息去批处理时使用的策略。
默认 |
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) |
|
image::tickmark.png[] |
||
[id="concurrentConsumers"][id="concurrentConsumers"][id="concurrentConsumers"]<<`concurrentConsumers`,concurrentConsumers>> (concurrency) |
为每个监听器初始启动的并发消费者数量。
请参阅 监听器并发。
对于 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="connectionFactory"][id="connectionFactory"][id="connectionFactory"]<<`connectionFactory`,connectionFactory>> (connection-factory) |
对 |
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) |
如果 |
image::tickmark.png[] |
||
[id="consumerCustomizer"][id="consumerCustomizer"][id="consumerCustomizer"]<<`consumerCustomizer`,consumerCustomizer>> (N/A) |
一个 |
image::tickmark.png[] |
||
[id="consumerStartTimeout"][id="consumerStartTimeout"][id="consumerStartTimeout"]<<`consumerStartTimeout`,consumerStartTimeout>> (N/A) |
等待消费者线程启动的时间(毫秒)。
如果此时间过去,则会写入错误日志。
发生这种情况的一个示例是,如果配置的 请参阅 线程和异步消费者。 默认值: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] 且 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="debatchingEnabled"][id="debatchingEnabled"][id="debatchingEnabled"]<<`debatchingEnabled`,debatchingEnabled>> (N/A) |
当为 true 时,监听器容器将对批处理消息进行去批处理,并用批处理中的每条消息调用监听器。
从版本 2.2.7 开始,如果监听器是 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="declarationRetries"][id="declarationRetries"][id="declarationRetries"]<<`declarationRetries`,declarationRetries>> (declaration-retries) |
当被动队列声明失败时的重试次数。
被动队列声明发生在消费者启动时,或者当从多个队列消费时,并非所有队列在初始化期间都可用时。
当经过重试后,所有配置的队列都无法被被动声明(出于任何原因)时,容器行为由前面描述的 |
image::tickmark.png[] |
||
[id="defaultRequeueRejected"][id="defaultRequeueRejected"][id="defaultRequeueRejected"]<<`defaultRequeueRejected`,defaultRequeueRejected>> (requeue-rejected) |
确定由于监听器抛出异常而被拒绝的消息是否应重新排队。
默认值: |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="errorHandler"][id="errorHandler"][id="errorHandler"]<<`errorHandler`,errorHandler>> (error-handler) |
对 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="exclusive"][id="exclusive"][id="exclusive"]<<`exclusive`,exclusive>> (exclusive) |
确定此容器中的单个消费者是否对队列具有独占访问权限。
当此属性为 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="exclusiveConsumerExceptionLogger"][id="exclusiveConsumerExceptionLogger"][id="exclusiveConsumerExceptionLogger"]<<`exclusiveConsumerExceptionLogger`,exclusiveConsumerExceptionLogger>> (N/A) |
当独占消费者无法访问队列时使用的异常记录器。
默认情况下,此信息以 |
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) |
如果消费者在 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="forceStop"][id="forceStop"][id="forceStop"]<<`forceStop`,forceStop>> (N/A) |
设置为 true 以在处理完当前记录后停止(当容器停止时);导致所有预取的消息重新排队。
默认情况下,容器将取消消费者并处理所有预取的消息,然后停止。
自 2.4.14、3.0.6 版本以来。
默认值为 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="globalQos"][id="globalQos"][id="globalQos"]<<`globalQos`,globalQos>> (global-qos) |
当为 true 时, |
image::tickmark.png[] |
image::tickmark.png[] |
|
(group) |
此属性仅在使用命名空间时可用。
指定后,将以该名称注册一个类型为 |
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) |
|
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) |
两次确认之间接收的消息数量。
使用此属性可以减少发送给代理的确认数量(代价是增加了消息重新投递的可能性)。
通常,您应该只在高吞吐量的监听器容器上设置此属性。
如果设置了此属性并且消息被拒绝(抛出异常),则待处理的确认将被确认,并且失败的消息将被拒绝。
不允许与事务性通道一起使用。
如果 |
image::tickmark.png[] |
||
[id="mismatchedQueuesFatal"][id="mismatchedQueuesFatal"][id="mismatchedQueuesFatal"]<<`mismatchedQueuesFatal`,mismatchedQueuesFatal>> (mismatched-queues-fatal) |
当容器启动时,如果此属性为 如果在恢复期间(例如,连接丢失后)检测到问题,则容器将停止。 应用程序上下文中必须只有一个 NOTE: 如果在初始启动期间代理不可用,容器将启动并在建立连接时检查条件。 IMPORTANT: 检查是针对上下文中所有队列进行的,而不仅仅是特定监听器配置使用的队列。
如果您希望将检查限制为容器使用的队列,则应为容器配置单独的 IMPORTANT: 在启动 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="missingQueuesFatal"][id="missingQueuesFatal"][id="missingQueuesFatal"]<<`missingQueuesFatal`,missingQueuesFatal>> (missing-queues-fatal) |
当设置为 这在以前的版本中是不可配置的。 当设置为 您还可以使用属性 bean 全局设置所有容器的属性,如下所示: [source,xml] ---- <util:properties id="spring.amqp.global.properties"> <prop key="mlc.missing.queues.fatal"> false </prop> </util:properties> ---- 此全局属性不适用于任何已设置显式 默认重试属性(三次重试,间隔五秒)可以通过设置以下属性来覆盖。 IMPORTANT: 在启动 |
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) |
设置为 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="phase"][id="phase"][id="phase"]<<`phase`,phase>> (phase) |
当 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="possibleAuthenticationFailureFatal"][id="possibleAuthenticationFailureFatal"][id="possibleAuthenticationFailureFatal"]<<`possibleAuthenticationFailureFatal`,possibleAuthenticationFailureFatal>> (possible-authentication-failure-fatal) |
当设置为 自 版本 2.0 起。 DirectMessageListenerContainer 当设置为 SimpleMessageListenerContainer 当设置为 您还可以使用属性 bean 全局设置所有容器的属性,如下所示: [source,xml] ---- <util:properties id="spring.amqp.global.properties"> <prop key="mlc.possible.authentication.failure.fatal"> false </prop> </util:properties> ---- 此全局属性不适用于任何已设置显式 默认重试属性(3 次重试,间隔 5 秒)可以使用此属性之后的属性来覆盖。 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="prefetchCount"][id="prefetchCount"][id="prefetchCount"]<<`prefetchCount`,prefetchCount>> (prefetch) |
每个消费者未确认消息的数量。
此值越高,消息传递速度越快,但非顺序处理的风险也越高。
如果 IMPORTANT: 在某些情况下,预取值应较低——例如,对于大型消息,特别是如果处理速度较慢(消息可能在客户端进程中累积大量内存),以及如果严格的消息排序是必需的(在这种情况下,预取值应设置回 1)。 此外,对于低吞吐量消息和多个消费者(包括单个监听器容器实例内的并发),您可能希望减少预取以获得消息在消费者之间更均匀的分布。 另请参阅 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="rabbitAdmin"][id="rabbitAdmin"][id="rabbitAdmin"]<<`rabbitAdmin`,rabbitAdmin>> (admin) |
当监听器容器监听至少一个自动删除队列,并且在启动期间发现该队列丢失时,容器会使用 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="receiveTimeout"][id="receiveTimeout"][id="receiveTimeout"]<<`receiveTimeout`,receiveTimeout>> (receive-timeout) |
等待每条消息的最长时间。
如果 |
image::tickmark.png[] |
||
[id="batchReceiveTimeout"][id="batchReceiveTimeout"][id="batchReceiveTimeout"]<<`batchReceiveTimeout`,batchReceiveTimeout>> (batch-receive-timeout) |
收集批处理消息的超时时间(毫秒)。
它限制了等待填满 |
image::tickmark.png[] |
||
[id="recoveryBackOff"][id="recoveryBackOff"][id="recoveryBackOff"]<<`recoveryBackOff`,recoveryBackOff>> (recovery-back-off) |
指定 |
image::tickmark.png[] |
image::tickmark.png[] |
|
[id="recoveryInterval"][id="recoveryInterval"][id="recoveryInterval"]<<`recoveryInterval`,recoveryInterval>> (recovery-interval) |
确定消费者因非致命原因启动失败时,两次启动尝试之间的时间(毫秒)。
默认值:5000。
与 |
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) |
当容器关闭时(例如,
如果其封闭的 |
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) |
当使用有状态重试建议时,如果收到缺少 |
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) |
一个 |
image::tickmark.png[] |
||
[id="taskExecutor"][id="taskExecutor"][id="taskExecutor"]<<`taskExecutor`,taskExecutor>> (task-executor) |
对 Spring |
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) |
监听器操作的外部事务管理器。
也与 |
image::tickmark.png[] |
image::tickmark.png[] |