对于最新的稳定版本,请使用 Spring AMQP 3.2.0! |
线程和异步使用者
异步使用者涉及许多不同的线程。
来自TaskExecutor
在SimpleMessageListenerContainer
用于调用MessageListener
当新邮件由RabbitMQ Client
.
如果未配置,则SimpleAsyncTaskExecutor
被使用。
如果您使用池化执行程序,则需要确保池大小足以处理配置的并发。
使用DirectMessageListenerContainer
这MessageListener
直接在RabbitMQ Client
线。
在这种情况下,taskExecutor
用于监视使用者的任务。
当使用默认的SimpleAsyncTaskExecutor 中,对于调用侦听器的线程,侦听器容器beanName 用于threadNamePrefix .
这对于日志分析非常有用。
我们通常建议始终在 logging appender 配置中包含线程名称。
当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
,如配置底层客户端连接工厂中所述。