2016-01-24 15 views

回答

0

任務的最大大小爲100KB對象的關鍵幾KB了。這是很多數據。這很難不看你的代碼給出具體意見,但我會提到這一點:如果你傳遞一個集合在一個循環任務要處理,不是顯而易見的解決辦法就是分裂整個集合

  1. 分成更小的塊,例如不是將1000個實體傳遞給一個任務,而是將100個實體傳遞給10個任務。

  2. 如果你將一個集合傳遞給一個不能被分割成塊的任務(例如你需要計算總和,平均值等),那麼不要傳遞這個集合,而是在任務本身查詢/檢索它。每個任務都保存回數據存儲區,所以通過將集合傳遞給任務不會獲得太多收益 - 無論如何都必須從數據存儲區中檢索。

  3. 如果您將一個非常大的對象傳遞給任務,只傳遞該任務實際需要的數據。例如,如果您的任務發送電子郵件,則可能需要傳遞電子郵件,名稱和消息,而不是傳遞可能包含許多其他屬性的整個用戶實體。

再說一次,100KB是很多數據。如果您沒有使用循環來處理任務中的許多實體,則任務隊列的問題可能表明您的數據模型通常存在更大的問題,因爲如果每次都必須推送大量數據。您可能需要考慮將巨大的實體分成幾個較小的實體。

0

檢查您要發送到任務隊列的有效負載(參數)的大小。

如果它是比大小,你需要將其存儲在數據存儲和發送數據保持到任務隊列

+0

如何檢查它的大小?我不想爲此創建數據存儲。是否有可能將數據分成較小的數據然後發送到隊列進行處理? – Weiming

+0

你可以檢查它的大小,因爲它是你創建它並將它傳遞給任務!如果你想跨任務分割數據,那麼你也可以這樣做,只要處理任務是可以處理的就可以了! –

+0

@Weiming,您可以從錯誤消息中看到您正在使用數據存儲。避免它沒有多大意義。當然,你可以將你的工作分成兩個更小的工作,但你不能拆分單個工作的有效載荷。這就像一個HTTP POST請求分成多個請求。 – konqi

相關問題