此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring AMQP 3.2.6spring-doc.cadn.net.cn

线程和异步使用者

异步使用者涉及许多不同的线程。spring-doc.cadn.net.cn

来自TaskExecutorSimpleMessageListenerContainer用于调用MessageListener当新消息由RabbitMQ Client. 如果未配置,则SimpleAsyncTaskExecutor被使用。如果您使用池执行器,则需要确保池大小足以处理配置的并发。使用DirectMessageListenerContainerMessageListener直接在RabbitMQ Client线。 在这种情况下,taskExecutor用于监视使用者的任务。spring-doc.cadn.net.cn

使用默认值SimpleAsyncTaskExecutor,对于调用侦听器的线程,侦听器容器beanName用于threadNamePrefix. 这对于日志分析很有用。我们通常建议始终在日志记录附加器配置中包含线程名称。当TaskExecutor通过taskExecutor属性,则按原样使用,无需修改。建议使用类似的技术来命名自定义TaskExecutorbean 定义,以帮助日志消息中的线程识别。

ExecutorCachingConnectionFactory被传递到RabbitMQ Client创建连接时,其线程用于将新消息传递到侦听器容器。如果未配置此作,则客户端将使用内部线程池执行器,其池大小(在编写时)为Runtime.getRuntime().availableProcessors() * 2对于每个连接。spring-doc.cadn.net.cn

如果您有大量工厂或正在使用CacheMode.CONNECTION,不妨考虑使用共享的ThreadPoolTaskExecutor有足够的线程来满足您的工作负载。spring-doc.cadn.net.cn

使用DirectMessageListenerContainer,您需要确保连接工厂配置了一个任务执行器,该执行器具有足够的线程,以支持使用该工厂的所有侦听器容器所需的并发性。默认池大小(在撰写本文时)为Runtime.getRuntime().availableProcessors() * 2.

RabbitMQ client使用ThreadFactory为低级 I/O(套接字)作创建线程。要修改此工厂,您需要配置底层 RabbitMQConnectionFactory,如配置基础客户端连接工厂中所述。spring-doc.cadn.net.cn