2017-11-25 323 views
0

我試圖排隊或安排作業(例如發送郵件)。以下是我在試用/錯誤過程中觀察到的情況:使用默認隊列時,類型不包含方法

  • 在開發和生產環境中,我們使用的是相同的redis服務器。 Redis配置相同,雙方僅使用一個隊列:default。因此,當其他開發人員正在調試代碼時,他們將成爲正在偵聽默認隊列的服務器。
  • 當我試圖排隊或安排一項工作,我最近在我的機器上開發並進行調試時,它不會執行,它在'Retries'部分中看到。方法根本找不到。重試10次後,失敗。 (順便說一句,我使用Enqueue<T>Schedule<T>方法。)
  • 當我介紹一個新的隊列(如測試)在Startup.cs,並與BackgroundJobClientEnqueuedState("test")排隊的新工作,並指定隊列名稱,會立即執行。

在所有這些之後,我沒有得到作業(函數)和隊列之間的關係。有人可以解釋爲什麼我的作業在「默認」隊列中執行時失敗,以及爲什麼他們在不同隊列中執行時成功?

另外,有人可以解釋我爲什麼當我嘗試運行一項工作時遇到「找不到方法」的問題嗎?

我在問這些問題,因爲我想了解所有這些問題背後的真正原因,而不是進行推理。

回答

0

不知道這是否會回答,但我有同樣的問題,並發現了幾件事情,當你使用Schedule(或重複的作業)

  • 隊列名稱的arent支持,只有當你直接Enqueue他們(除非你自定義創建一個系統來支持它)。 See this,這是舊的,但應該仍然有效。

  • 如果你有多個運行hangfire的服務來管理不同類型的作業,一定要給他們每個人一個不同的hangfire數據庫來存儲他們的數據。如果你把他們全部放在同一個數據庫上,當一個工作需要時啓動HF將搜索一個默認隊列來運行它(除非你指定了隊列名稱,但是......見上)。

  • 但是每個服務都會有一個HF服務器,它有一個默認隊列,並且沒有指出哪一個是正確的......所以HF可能會結束嘗試在另一個服務的服務器上運行它,那不會有任何想法因爲它沒有鏈接到正確的代碼庫(again,see this)。另一方面,如果您指定隊列的名稱,並且該名稱只在服務器上「鏈接」到正確的代碼上,那麼HF將在該隊列上運行該作業(同樣,只要您不安排它) ,找到它需要什麼,這樣就可以了

希望這有助於有點

相關問題