0

我可以找到在生产者的供应和消费者的消费之间造成延迟的方法。

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

我试过weblogic.jms.extensions.WLMessageProducer producer = (weblogic.jms.extensions.WLMessageProducer)queueSender;制作人

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

onmessage 但没有看到任何区别。

4

2 回答 2

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)

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

于 2013-10-09T17:43:08.690 回答
1

你的问题有点矛盾,因为“消费者每 2 秒只选择 1 条消息”与“在每条消息从队列发送到消费者之前控制延迟”不同。例如,如果您的生产者以 10,000/hr 的速度输入消息,并且如果您在每条消息上设置 30 分钟,那么您的消费者仍会尝试以 10,000/hr 的速度进行消费。延迟的唯一影响是消费者在生产者开始注入后 30 分钟才开始消费。

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

在队列设置TimeDeliver Override设置为会为每条消息实现延迟,但不会更改速率。您也可以在生产者的代码中设置Timeto Deliver,但如果也设置了 WebLogic 队列设置,则将优先(覆盖!)。

希望那是一些帮助!

于 2013-10-10T15:25:49.337 回答