Topic和queue的最大区别在于topic是以广播的形式,通知所有在线监听的客户端有新的消息,没有监听的客户端将收不到消息;而queue则是以点对点的形式通知多个处于监听状态的客户端中的一个。
2 topic和queue方式的消息处理效率比较 通过增加监听客户端的并发数来验证,topic的消息推送,是否会因为监听客户端的并发上升而出现明显的下降,测试环境的服务器为ci环境的ActiveMQ,客户端为我的本机。 从实测的结果来看,topic方式发送的消息,发送和接收的效率,在一个订阅者和100个订阅者的前提下没有明显差异,但在500个订阅者(线程)并发的前提下,效率差异很明显(由于500线程并发的情况下,我本机的cpu占用率已高达70-90%,所以无法确认是我本机测试造成的性能瓶颈还是topic消息发送方式存在性能瓶颈,造成效率下降如此明显)。 Topic方式发送的消息与queue方式发送的消息,发送和接收的效率,在一个订阅者和100个订阅者的前提下没有明显差异,但在500个订阅者并发的前提下,topic方式的效率明显低于queue。 Queue方式发送的消息,在一个订阅者、100个订阅者和500个订阅者的前提下,发送和接收的效率没有明显变化。 Topic实测数据:
| 发送者发送的消息总数
| 所有订阅者接收到消息的总数
| 消息发送和接收平均耗时
| 单订阅者
| 100
| 100
| 101ms
| 100订阅者
| 100
| 10000
| 103ms
| 500订阅者
| 100
| 50000
| 14162ms
|
Queue实测数据:
| 发送者发送的消息总数
| 所有订阅者接收到消息的总数
| 消息发送和接收平均耗时
| 单订阅者
| 100
| 100
| 96ms
| 100订阅者
| 100
| 100
| 96ms
| 500订阅者
| 100
| 100
| 100ms
|
|