0

我有一个应用程序,我在其中实施了 Oracle AQ。我注意到,在向 AQ 生成消息后,JMS Push 消费者对消息的消费有几秒钟的延迟。

我运行了这个场景,我在 AQ 中生成了几条消息,比如一小时内 10 条消息。我注意到消息的消费有几秒钟的延迟。我计算了这种情况下的平均延迟时间,结果为 12 秒,最大延迟时间为 13.5 秒。

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

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

请帮助我找出这种延迟的原因以及如何缩短这个时间间隔。

~谢谢

4

1 回答 1

1

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

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

分析如果从 AQ 接收到空消息,Listener 线程睡眠时间会翻倍直到 15000 毫秒(15 秒),从默认值 1000 毫秒开始。

要减少睡眠时间,请设置以下系统属性:

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

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

于 2014-10-21T21:16:58.220 回答