我有一個工作人員角色處理隊列中的項目。它基本上是一個無限循環,它將項目從隊列中彈出並異步處理它們。工作人員角色過程 - 配置值輪詢
我有兩個配置設置(PollingInterval
和MessageGetLimit
),我希望工人角色在更改時拾取(因此不需要重新啓動)。
private TimeSpan PollingInterval
{
get
{
return TimeSpan.FromSeconds(Convert.ToInt32(RoleEnvironment.GetConfigurationSettingValue("PollingIntervalSeconds")));
}
}
private int MessageGetLimit
{
get
{
return Convert.ToInt32(RoleEnvironment.GetConfigurationSettingValue("MessageGetLimit"));
}
}
public override void Run()
{
while (true)
{
var messages = queue.GetMessages(MessageGetLimit);
if (messages.Count() > 0)
{
ProcessQueueMessages(messages);
}
else
{
Task.Delay(PollingInterval);
}
}
}
問題:
在高峯時段,while循環可以運行一對夫婦次每秒。這意味着它將每天查詢配置項目高達100,000次。
這是有害的還是低效的?
我實際上實現了這一點,它造成了更多的問題,而不是幫助。隨着隊列,我實現了一些預期延遲的小型工作。不幸的是,在退出投票時,我遇到了一個情況,一個客戶會一次發送30個請求/微型工作,而我一分錢也不願意每月節省幾美元,而且這些請求被不必要的門限所拖延。 –
延遲只是您願意等待處理郵件的最長時間。如果那是2秒鐘,它不應該等待超過2秒。系統應在處理完消息後立即檢查,看看是否有另一個消息再開始退出。如果您始終在尋找即時響應,那麼請保持緊密的循環或查看除隊列以外的其他內容。我會同意,在某些情況下這可能是一分錢捏,但是要求經常需要人工干預的事情也不好。這最終會花費更多。 – MikeWo