此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring AMQP 3.2.6! |
线程和异步使用者
异步使用者涉及许多不同的线程。
来自TaskExecutor
在SimpleMessageListenerContainer
用于调用MessageListener
当新消息由RabbitMQ Client
. 如果未配置,则SimpleAsyncTaskExecutor
被使用。如果您使用池执行器,则需要确保池大小足以处理配置的并发。使用DirectMessageListenerContainer
这MessageListener
直接在RabbitMQ Client
线。 在这种情况下,taskExecutor
用于监视使用者的任务。
使用默认值SimpleAsyncTaskExecutor ,对于调用侦听器的线程,侦听器容器beanName 用于threadNamePrefix . 这对于日志分析很有用。我们通常建议始终在日志记录附加器配置中包含线程名称。当TaskExecutor 通过taskExecutor 属性,则按原样使用,无需修改。建议使用类似的技术来命名自定义TaskExecutor bean 定义,以帮助日志消息中的线程识别。 |
这Executor
在CachingConnectionFactory
被传递到RabbitMQ Client
创建连接时,其线程用于将新消息传递到侦听器容器。如果未配置此作,则客户端将使用内部线程池执行器,其池大小(在编写时)为Runtime.getRuntime().availableProcessors() * 2
对于每个连接。
如果您有大量工厂或正在使用CacheMode.CONNECTION
,不妨考虑使用共享的ThreadPoolTaskExecutor
有足够的线程来满足您的工作负载。
使用DirectMessageListenerContainer ,您需要确保连接工厂配置了一个任务执行器,该执行器具有足够的线程,以支持使用该工厂的所有侦听器容器所需的并发性。默认池大小(在撰写本文时)为Runtime.getRuntime().availableProcessors() * 2 . |
这RabbitMQ client
使用ThreadFactory
为低级 I/O(套接字)作创建线程。要修改此工厂,您需要配置底层 RabbitMQConnectionFactory
,如配置基础客户端连接工厂中所述。