JMS推送消费者延迟从Oracle AQ获取消息

时间:2014-10-16 09:13:19

标签: java jms oracle-aq

我有一个应用程序,我已经实现了Oracle AQ。我注意到,在向AQ生成消息后,JMS Push消费者消息消息会延迟几秒钟。

我运行了这个场景,我在一小时内向AQ发了几条消息,就像10条消息一样。我注意到消息的消耗延迟了几秒钟。我计算了这种情况下的平均延迟时间,结果是12秒,最长延迟时间为13.5秒。

但是当我在一小时内将生产率提高到1000条消息时。我看到消费延迟较少。我得到了一个5秒的恒定平均值,最大延迟为5.2秒。

我可以假设JMS消费者线程可能有一些休眠时间但我有点困惑,因为我使用Push消费者而不是Poll消费者。

请帮我找出延迟的原因,如何缩短这段时间。

〜感谢

1 个答案:

答案 0 :(得分:1)

启用( -Doracle.jms.traceLevel=6 )aq api的诊断日志。

如果消息不可用,则AQjmsListenerWorker进入休眠状态,如果消息不可用,则每次睡眠时间加倍(达到峰值限制)。

分析监听器线程休眠时间翻倍至15000毫秒(15秒),从默认值1000毫秒开始,如果从AQ收到空消息。

减少系统属性后设置的休眠时间:

oracle.jms.minSleepTime=100
oracle.jms.maxSleepTime=4000

更多详情请参阅: http://querydb.blogspot.in/2014/10/jms-consumer-onmessage-delay-in-getting.html