2016-11-12 12 views
3

我有一個wep api,在一秒鐘內獲得超過100個請求,它需要快速回復。將QueueBackgroundWorkItem用於事件集線器發送數據操作是否是一個好主意?

有在每個請求的兩個主要任務:

  • 獲取從緩存答案並返回給用戶
  • 結果發送到活動中心(對於某些每小時計算)

第二部分不關心api調用者。所以任何錯誤和緩慢,超時都不應該改變我的響應時間。

我的問題:

  1. 那麼應該怎麼執行?

  2. 我可以使用「HostingEnvironment.QueueBackgroundWorkItem」作爲後臺作業的那種 嗎?你有什麼建議?

  3. 可以使用異步版本的事件集線器發送方法更改任何可能的實現的可伸縮性和性能的東西 ?

回答

1

您可以將結果放入一個隊列並讓後臺進程按自己的步調讀取該隊列。這允許您將結果分組在一起,並使用批處理將它們發送到eventhub。請參閱https://azure.microsoft.com/en-us/documentation/articles/event-hubs-programming-guide/#batch-event-send-operations

只要讀取它的過程是分開的,將項目放入某種隊列應該是相當快速和安全的。作爲獎勵,當Web應用程序失敗/停止,不管事件是否丟失,但存儲在隊列中。您可以將Azure Storage Queuehttps://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-queues/)與簡單的網絡作業或Azure Functionhttps://azure.microsoft.com/en-us/documentation/articles/functions-bindings-storage/)結合使用來處理事件。

看到這個有點舊的文章http://blog.stephencleary.com/2014/06/fire-and-forget-on-asp-net.html更多的背景資料爲什麼這個設置,而不是使用QueueBackgroundWorkItem選項和這個答案更多的閱讀材料:Web Api - Fire and Forget

+0

謝謝你的回答。其實我想知道這個想法是否合理?我只想保持我的api穩定,並且不想因爲任何錯誤或超時而不感興趣的api調用者變得緩慢。順便說一句,我已經在使用批處理髮送消息。 –

+0

查看更新的答案。 –

相關問題