线程和异步使用者

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

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

当使用默认的SimpleAsyncTaskExecutor中,对于调用侦听器的线程,侦听器容器beanName用于threadNamePrefix. 这对于日志分析非常有用。 我们通常建议始终在 logging appender 配置中包含线程名称。 当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