1

我在 c3.large 机器上的 ec2 中运行 spring-boot 应用程序。它初始化一个 spring-rabbit 客户端,它启动自己的线程。

在使用 YourKit 分析我的应用程序后,我发现在 rabbit 客户端线程中花费了很多时间,里面:com.rabbitmq.client.impl.AMQConnection$MainLoop.run()特别是在java.io.DataStream.readUnsignedByte()

对我来说,这看起来像是有一个 while 循环不断阻止从 RabbitMQ 服务器获取套接字上的一些输入。

有没有人遇到过这个?我是否正确阅读了分析结果?有没有办法让 amqp 客户端不阻塞?

4

1 回答 1

3

该代码 ( com.rabbitmq.client) 位于amqp-clientSpring AMQP 使用的底层(RabbitMQ Java 客户端)代码中。

对我来说,这看起来像是有一个 while 循环不断阻止从 RabbitMQ 服务器获取套接字上的一些输入。

是的,但是当它阻塞等待数据时,它不使用 CPU - 只有当数据可用时,该方法才会返回。它没有旋转等待数据的cpu。

于 2015-05-31T13:23:34.437 回答