我在c3large机器上运行ec2中的spring-boot应用程序。它初始化了一个spring-rabbit客户端,它启动了自己的线程。
在使用YourKit分析我的应用程序之后,我发现在兔子客户端线程中花了很多时间,在com.rabbitmq.client.impl.AMQConnection$MainLoop.run()
内特别向下java.io.DataStream.readUnsignedByte()
对我来说,看起来有一个while循环不断阻止从RabbitMQ服务器获取套接字上的输入。
有没有人碰到这个?我是否正确阅读了分析结果?有没有办法让amqp客户端无阻塞?
答案 0 :(得分:3)
该代码(com.rabbitmq.client
)位于Spring AMQP使用的基础amqp-client
(RabbitMQ Java客户端)代码中。
对我来说,看起来有一个while循环不断阻止从RabbitMQ服务器获取套接字上的输入。
是的,但当它阻止等待数据时,它不会使用CPU - 仅当数据可用时才返回该方法。它没有旋转cpu等待数据。