2012-07-12 60 views
2

我有我寫這需要在後臺執行長計算的應用程序,所以我有實質上包含以下流程:消息隊列中的作業的唯一ID?

  1. 客戶端提交作業的邊緣「調度員」服務器。
  2. 調度程序服務器將作業提交給消息隊列。
  3. 計算服務器拉取作業並開始工作。

計算服務器還提供工作狀態的實時反饋,以便客戶可以觀察進度。

我有現在的主要問題是搞清楚如何獲得一個唯一的作業的標識提交的消息隊列,也該服務器提供服務的消息後的事實搞清楚。一旦作業最初提交(步驟1),客戶端應該收到一個唯一標識該作業的令牌。客戶端應該能夠定期輪詢調度服務器,檢查令牌的狀態是否已經啓動。

經過計算服務器提供服務的請求,客戶端應該然後得到在民意調查通話編碼器服務器的DNS地址或IP地址。

我怎樣才能做到這一點?消息隊列是否爲隊列中的每條消息提供了唯一標識令牌的概念?

回答

8

事實證明,RabbitMQ的does in fact give unique ids for messages,在RPC應用程序,這是我期待在創造一種應用特別有用。每條信息都有一個correlationId唯一標識,並可以提供callback可通知原來的服務器在工作時在任何點已完成或真正的。

1

可以使用java.util.UUID類生成全局唯一標識符。

示例代碼:

UUID uuid = UUID.randomUUID(); 
System.out.println("UUID: " + uuid.toString()); 

輸出樣本:UUID: d5a43450-2321-40ac-9746-9cf5d7447aca

對於消息隊列的一部分,以避免重新發明輪子,我建議您先檢查基於JMS的解決方案。有a lot of alternatives