我有一个应用程序,我已经实现了Oracle AQ。我注意到,在向AQ生成消息后,JMS Push消费者消息消息会延迟几秒钟。
我运行了这个场景,我在一小时内向AQ发了几条消息,就像10条消息一样。我注意到消息的消耗延迟了几秒钟。我计算了这种情况下的平均延迟时间,结果是12秒,最长延迟时间为13.5秒。
但是当我在一小时内将生产率提高到1000条消息时。我看到消费延迟较少。我得到了一个5秒的恒定平均值,最大延迟为5.2秒。
我可以假设JMS消费者线程可能有一些休眠时间但我有点困惑,因为我使用Push消费者而不是Poll消费者。
请帮我找出延迟的原因,如何缩短这段时间。
〜感谢
答案 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