2013-10-09 90 views
0

我可以找到方法在生產者供應和消費者消費之間產生延遲。延遲向消費者提供消費隊列中的消息:Weblogic

但我想知道是否有任何可能的方式來創建每個消息的延遲。我希望我的消費者每2秒只能選擇一條消息,但我希望我的製作人以最佳性能生產我的消費者沒有生產者那麼高效。 那麼,在從隊列發送給消費者之前,是否有辦法控制每條消息的延遲?

我對製片人

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

的onMessage但沒有看到任何區別試圖weblogic.jms.extensions.WLMessageProducer producer = (weblogic.jms.extensions.WLMessageProducer)queueSender;

回答

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以來已被棄用。

+0

謝謝,但我的意思是我改變它到這個接口並使用setTimeToDeliver(),對不起,我不明確。謝謝你的時間。 – Rorschach

1

在您的問題中存在一些矛盾,因爲「消費者每2秒只能選擇一條消息」與「每條消息的控制延遲之前不一樣」它從隊列發送到消費者「。例如。如果您的製作人以10,000 /小時的速度發送信息,並且如果您在每條信息上投入了30分鐘的交易,那麼您的客戶仍然會嘗試以10,000 /小時的速度消費,如果可能的話。延遲的唯一影響是消費者直到生產者開始注射後30分鐘纔開始消費。

假設前者是你想要做的,做到這一點我相信WebLogic中唯一的選擇是在你的用戶代碼中實現一些東西來減慢處理。

對隊列設置的設置TimeDeliver Override實現每條消息的延遲,但不會更改速率。您還可以使用來自生產者的代碼將Time設置爲Deliver,但如果還設置了WebLogic隊列設置,則會先於(覆蓋!)。

希望這有些幫助!