[英]Fair task queue for Java EE
我打算在人們可以向系統提交任務(特別是轉碼任務)的情況下提供服務,他們應該盡快得到服務,但同時它不應該讓其他人餓死,即它必須是公平的。 如果一個人提交2000個任務,系統不應該一直只迎合他,而是做一個循環或其他人的請求之類的東西...
有沒有解決方案? 我查看了rabbitMQ和其他消息傳遞系統,但它們並不能完全滿足我的問題。 公平的任務隊列是如何實現的?
我會這樣實現:
在隊列上有一個隊列偵聽器,當消息到達時檢查上次接收到給定用戶的任務; 如果時間<1秒將它放在隊列1上,如果時間<10秒放在隊列2上,如果時間<100秒放在隊列3上,否則放入隊列4.然后你將在4個隊列上有聽眾處理任務。
當然,您可以更改隊列數並更改時間以匹配最佳吞吐量。 理想情況下,您希望您的隊列始終處於忙碌狀態。
我不認為這種行為本身存在,但我可以看到它是用RabbitMQ的一些功能實現的。
http://www.rabbitmq.com/blog/2010/08/03/well-ill-let-you-go-basicreject-in-rabbitmq/
那會讓你拒絕消息並重新排隊。 然后,您必須編寫一個實用程序,該實用程序可以根據消息的某些標識屬性選擇執行或重新排隊消息(在本例中,報表請求者是您的應用程序自定義的)。 可以想象,如果策略包含您嘗試限制的用戶的ID,則可以完全圍繞路由鍵設計策略。
您的政策可以使用
希望這有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.