2017-10-10 103 views
0

我的azure函數計算某些請求作業(cca.5s-5min)的結果,其中每個作業根據請求消息的散列值具有唯一的jobId。執行導致確定性結果。所以它在功能上是「純粹的功能」。因此,我們將基於jobId的已評估作業的結果緩存到blob存儲中。迄今爲止都很棒。如何獲取隊列觸發天青功能的運行狀態?

現在如果對jobId的請求出現三種情況是可能的。

  1. 結果在緩存中已經=>然後它從緩存中提供。
  2. 結果不在緩存中,並沒有功能正在運行評估=>新調用
  3. 結果不在緩存中,但有些功能已經在開發它=>等待結果

我們做一些基於自定義表格存儲的進度跟蹤魔術來判斷函數是否在給定jobId上工作或者還沒有工作。

它以某種方式工作,直到5 x重新啓動 - >毒性隊列方案。在那裏,我們相當無望。

我覺得我們正在竊取一些已經可靠實現的Azure函數內部特性,因爲在Azure門戶的監視器頁面中可以看到完全相同的信息,或者曾經在kudu webjobs監視器頁面中可見。

如何在c#中可靠地找出給定消息(jobId)當前是否正在被某個函數處理,何時不是?

回答

0

如何在c#中可靠地找出給定消息(jobId)當前是否正在被某個函數處理,何時不是?

如果你想檢測哪個消息正在處理,並得到隊列中的消息ID觸發Azure的功能,你可以試試下面的代碼:

#r "Microsoft.WindowsAzure.Storage" 
using System; 
using Microsoft.WindowsAzure.Storage.Queue; 

public static void Run(CloudQueueMessage myQueueItem, TraceWriter log) 
{ 
    log.Info($"messageid: {myQueueItem.Id}, messagebody: {myQueueItem.AsString}"); 
} 
+0

感謝您的努力,但似乎您正在建議一個處理來自隊列的消息的函數。我已經有一個處理消息「FunctionA」的函數,並且我希望其他函數「FunctionB」能夠確定某個「FunctionA」是否已經在消息中工作。如果進程啓動而不是排隊新消息,則「功能B」等待結果是有意義的。 –

0

Azure的耐用功能提供了一種機制如何跟蹤執行較小任務的進度。

https://docs.microsoft.com/en-us/azure/azure-functions/durable-functions-overview

Accroding的「模式#3:異步HTTP API的」協調器可以提供功能狀態信息的形式是這樣的:

{"runtimeStatus":"Running","lastUpdatedTime":"2017-03-16T21:20:47Z", ...} 

這解決了我的關於發現的問題,如果給定消息正在處理中。

相關問題