队列中的消息延迟提供给消费者:Weblogic

时间:2013-10-09 08:50:04

标签: java jms weblogic

我可以想办法在生产者供应和消费者消费之间造成延迟。

但是我想知道是否有任何可能的方法来创建每条消息的延迟。我希望我的消费者每2秒只选择一条消息,但我希望我的生产者以最佳性能生产,因为我的消费者是不如生产者有效。 那么,有没有办法在每个消息从队列发送到消费者之前控制每个消息的延迟?

我在制作人

上试了weblogic.jms.extensions.WLMessageProducer producer = (weblogic.jms.extensions.WLMessageProducer)queueSender;

`weblogic.jms.extensions.WLMessage message=(weblogic.jms.extensions.WLMessage)tMessage;
 message.setJMSDeliveryTime(20000);` 

onmessage但没有看到任何差异。

2 个答案:

答案 0 :(得分:1)

你可能想要:

((weblogic.jms.extensions.WLMessageProducer)producer).setTimeToDeliver(2000);

http://docs.oracle.com/cd/E15051_01/wls/docs103/javadocs/weblogic/jms/extensions/WLMessageProducer.html#setTimeToDeliver(long)

我不确定你的第一次尝试应该做什么。但自Weblogic 9以来,setJMSDeliveryTime已被弃用。

答案 1 :(得分:1)

你的问题中有一点矛盾,“消费者每2秒只选择一条消息”与“从队列发送到消费者之前控制每条消息的延迟”不一样。例如。如果你的制作人以10,000 /小时的速度发出消息,如果你在每条消息上花了30分钟,你的消费者仍会尝试以10,000 /小时的速度消费。延迟的唯一影响是消费者在生产者开始注射后30分钟才开始消费。

假设前者是你想要做的,为了做到这一点,我相信WebLogic中唯一的选择就是在你的消费者代码中实现一些东西来减慢这方面的处理速度。

在队列设置上将Time设置为Deliver Override会对每封邮件执行延迟,但不会更改速率。您还可以在生产者的代码中将Time设置为Deliver,但如果同时设置,则WebLogic队列设置将优先于(覆盖!)。

希望有所帮助!