线程与异步消费者

异步消费者涉及多个不同的线程。spring-doc.cadn.net.cn

来自任务执行者配置在SimpleMessageListenerContainer用于调用消息监听器当新消息通过RabbitMQ 客户端. 如果未配置,则SimpleAsyncTaskExecutor被使用。如果你使用池化执行器,需要确保池大小足够处理配置的并发。使用DirectMessageListenerContainer消息监听器直接调用于RabbitMQ 客户端线。 在这种情况下,任务执行者用于监控消费者的任务。spring-doc.cadn.net.cn

使用默认时SimpleAsyncTaskExecutor对于监听器被调用的线程,监听器容器豆名用于threadNamePrefix. 这对日志分析非常有用。我们通常建议在日志附加器配置中始终包含线程名称。当任务执行者具体通过任务执行者容器上的属性,按原样使用,无需修改。建议使用类似的技术来命名自定义创建的线程任务执行者BEAN 定义,用于帮助日志消息中的线程识别。

执行者配置在缓存连接工厂传递为RabbitMQ 客户端在创建连接时,其线程用于向监听器容器传递新消息。如果未配置,客户端将使用内部线程池执行器,写入时池大小为Runtime.getRuntime().availableProcessors() * 2每一个连接。spring-doc.cadn.net.cn

如果你有大量工厂或正在使用这些缓存模式.连接你可能想考虑使用共享线程池任务执行者有足够的线程来满足你的工作量。spring-doc.cadn.net.cn

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

RabbitMQ 客户端使用线程工厂用于创建低级 I/O(套接字)作的线程。要修改该工厂,你需要配置底层的 RabbitMQ连接工厂《配置底层客户端连接工厂》中所述。spring-doc.cadn.net.cn