Java 从Oralce AQ获取消息时的JMS推送使用者延迟

Java 从Oralce AQ获取消息时的JMS推送使用者延迟,java,jms,oracle-aq,Java,Jms,Oracle Aq,我有一个应用程序,在其中我实现了Oracle AQ。我注意到,在消息被生成到AQ之后,JMS推送消费者对消息的使用有几秒钟的延迟 我运行了这个场景,在这个场景中,我在AQ中生成了几条消息,就像一小时内生成了10条消息一样。我注意到消息的消耗有几秒钟的延迟。我计算了这种情况下的平均延迟时间,结果是12秒,最大延迟时间是13.5秒 但当我将我的生产速度提高到一小时1000条消息时。我看到消费的延迟减少了。我得到了5秒的恒定平均值,最大延迟为5.2秒 我可以假设JMS消费者线程可能有一些睡眠时间,但我

我有一个应用程序,在其中我实现了Oracle AQ。我注意到,在消息被生成到AQ之后,JMS推送消费者对消息的使用有几秒钟的延迟

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

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

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

请帮我找出延误的原因,以及如何缩短这段时间间隔

~感谢您为aq api启用(
-Doracle.jms.traceLevel=6
)诊断日志

如果消息不可使用,AQjmsListenerWorker将进入睡眠状态;如果消息不可使用,睡眠时间将每次翻倍(达到峰值限制)

分析表明,如果从AQ接收到空消息,侦听器线程睡眠时间将加倍,直到15000毫秒(15秒),从默认值1000毫秒开始

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

oracle.jms.minSleepTime=100
oracle.jms.maxSleepTime=4000
详情请参阅: