我发现PERSISTENT消息的性能远低于NON_PERSISTENT消息。 我发送并收到了非持久性消息,其性能如下。
Method Number of Msg Elapsed Time
Sending - 500 messages - 00:00:0332
Receiving - 500 messages - 00:00:0281
我发送并收到了持久消息,其性能如下。
Sending - 500 messages - 00:07:0688
Receiving - 500 messages - 00:06:0934
MQMessage和JMSMessage都会发生此行为。
感谢所有人帮我解决问题。
特别感谢Shashi,T.Rob和Pangea。
答案 0 :(得分:4)
鉴于新标题,我发现我现在对这个问题有回应。
是的,持久性消息总是比非持久性消息花费更长时间,而所有其他方面都相同。但是,它们较慢的程度是高度可调的。为了获得您所看到的结果,队列管理器可能具有许多最坏情况的调整。以下是一些适用的因素:
由于非持久性消息完全在内存中处理,或者溢出到最多一个磁盘文件,因此它们不会受到大多数这些问题的影响。
答案 1 :(得分:1)
我相信你的mirco-benchmarking is flawed(使用错误的基准测试机制,你还包括i / o(开始和结束时间计算中的System.out.println)到图片中)。首先使用像Google's Caliper这样的工具来纠正数字,然后寻找答案。上次我知道(2003年我认为),MQ JMS实现是Java MQI类的包装,我们必须坚持使用Java MQI来满足我们的最佳吞吐量。
答案 2 :(得分:0)
WebSphere MQ JMS消息带有其他标头(称为JMS标头)以支持JMS消息传递方式。 JMSDestination,JMSReplyTo,JMSDeliveryMode,JMSType等以及提供程序特定的JMS头是JMS头的一部分。每次发送或接收消息时都会处理这些标头。
另一方面,WebSphere MQ Java类仅发送/接收纯WMQ消息。 WMQ消息将包含MQMD,后跟消息体。
所以你可以看到差异。 JMS消息的优点是它是基于标准的,并且JMS消息是可互操作的。