1
我需要配置使用Azure隊列和Web作業的SharePoint Online團隊客房。 我創建了一個控制檯應用程序,並公佈爲連續Web作業使用以下設置:Azure Web作業 - 來自隊列的並行消息處理無法正常工作
config.Queues.BatchSize = 1;
config.Queues.MaxDequeueCount = 4;
config.Queues.MaxPollingInterval = TimeSpan.FromSeconds(15);
JobHost host = new JobHost();
host.RunAndBlock();
觸發功能如下:
public static void TriggerFunction([QueueTrigger("messagequeue")]CloudQueueMessage message)
{
ProcessQueueMsg(message.AsString);
}
內ProcessQueueMsg功能即時deserialising接收JSON消息在一個類中運行以下操作:
- 我在現有網站集中創建子網站;
- 使用Pnp供應引擎,我在供應內容的子 網站(列表,上傳文件,權限,快速午餐等)。
如果在隊列中我只有一條消息要處理,那麼一切正常。
但是,當我在延遲幾秒的隊列中發送兩條消息時,在處理第一條消息時,下一條消息覆蓋類屬性,並且第一條消息結束。
試圖在單獨的線程中運行每條消息,但觸發器函數在我的函數內部處理消息之前標記爲成功。這樣我就無法控制潛在的異常/消息出隊。
試圖也給線程數限制爲1和信號燈使用,但有相同的行爲:
private const int NrOfThreads = 1;
private static readonly SemaphoreSlim semaphore_ = new SemaphoreSlim(NrOfThreads, NrOfThreads);
//Inside TriggerFunction
try
{
semaphore_.Wait();
new Thread(ThreadProc).Start();
}
catch (Exception e)
{
Console.Error.WriteLine(e);
}
public static void ThreadProc()
{
try
{
DoWork();
}
catch (Exception e)
{
Console.Error.WriteLine(">>> Error: {0}", e);
}
finally
{
// release a slot for another thread
semaphore_.Release();
}
}
public static void DoWork()
{
Console.WriteLine("This is a web job invocation: Process Id: {0}, Thread Id: {1}.", System.Diagnostics.Process.GetCurrentProcess().Id, Thread.CurrentThread.ManagedThreadId);
ProcessQueueMsg();
Console.WriteLine(">> Thread Done. Processing next message.");
}
有沒有一種方法可以讓我以運行並行的消息我的處理功能,提供我的網站沒有干擾?
如果您需要更多詳細信息,請讓我知道。
預先感謝您!