簡體   English   中英

Java EE的公平任務隊列

[英]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,則可以完全圍繞路由鍵設計策略。

您的政策可以使用

  • 用basic.reject回復
  • 使用{requeue = true}

希望這有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM