我可以找到在生产者的供应和消费者的消费之间造成延迟的方法。
但我想知道是否有任何可能的方法在每个message.Say上造成延迟,我希望我的消费者每2秒只挑选一条消息,但我希望我的生产者以其最佳性能速度生产,因为我的消费者没有生产者效率高。那么,有没有一种方法可以在消息从队列发送到消费者之前控制其延迟呢?
我在producer上试用了weblogic.jms.extensions.WLMessageProducer producer = (weblogic.jms.extensions.WLMessageProducer)queueSender;
和
`weblogic.jms.extensions.WLMessage message=(weblogic.jms.extensions.WLMessage)tMessage;
message.setJMSDeliveryTime(20000);` onmessage,但看不到任何区别。
发布于 2013-10-10 01:43:09
您可能需要:
((weblogic.jms.extensions.WLMessageProducer)producer).setTimeToDeliver(2000);http://docs.oracle.com/cd/E15051_01/wls/docs103/javadocs/weblogic/jms/extensions/WLMessageProducer.html#setTimeToDeliver(long)
我不确定你的第一次尝试应该做什么。但是从WebLogic9开始,setJMSDeliveryTime就被弃用了。
发布于 2013-10-10 23:25:49
你的问题有一点矛盾,因为“消费者每2秒只挑选一条消息”与“在消息从队列发送到消费者之前控制每条消息的延迟”不是一回事。例如,如果你的生产者以10,000/小时的速度发送消息,如果你为每条消息设置30分钟的交易,如果可能的话,你的消费者仍然会尝试以10,000/小时的速度消费。延迟的唯一影响是消费者直到生产商开始注射后30分钟才开始消费。
假设前者是您想要做的,那么我相信在WebLogic中唯一的选择就是在您的消费者代码中实现一些东西来减慢这一端的处理速度。
在队列设置中将Time设置为Deliver Override会延迟每条消息,但不会更改速率。您也可以在生产者的代码中将Time设置为Deliver,但WebLogic队列设置将在前面(override!)如果还设置了。
希望这能有所帮助!
https://stackoverflow.com/questions/19267193
复制相似问题