【问题标题】:Supply of messages in queue to consumer with delay:Weblogic延迟向消费者提供队列中的消息:Weblogic
【发布时间】:2013-10-09 08:50:04
【问题描述】:

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

但我想知道是否有任何可能的方法来对每条消息造成延迟。假设我希望我的消费者每 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 但没有发现任何区别。

【问题讨论】:

    标签: java jms weblogic


    【解决方案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 起已被弃用。

    【讨论】:

    • 谢谢,但我的意思是我把它改成了这个接口并使用了 setTimeToDeliver(),抱歉我没有说清楚。感谢您的宝贵时间。
    【解决方案2】:

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

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

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

    希望对你有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-28
      • 1970-01-01
      • 1970-01-01
      • 2019-10-16
      • 1970-01-01
      • 2014-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多