对于某些消息队列中间件标榜自己吞吐量高一直无法理解,一直觉得,不同的消息队列实现,吞吐量不会差太多,不管是多是少总不会差一个量级上,,一丁点差距没有值得称道的地方。
直到我用了ActiveMQ,才终于明白,标榜吞吐量高,全是同行衬托的,ActiveMQ的实现上一定有一个不大的Bug。这个Bug源于我发现的一个现象,ActiveMQ管理界面上可以看队列中还有7条消息等待多时仍然迟迟没有消费。将线程Dump下来后发现,Java消费者线程却全部卡在了读取消息的位置
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
at java.net.SocketInputStream.read(SocketInputStream.java:171)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at sun.security.ssl.InputRecord.readFully(InputRecord.java:465)
at sun.security.ssl.InputRecord.readV3Record(InputRecord.java:593)
at sun.security.ssl.InputRecord.read(InputRecord.java:532)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:983)
- locked <0x00000000d5a90800> (a