푸른 대기열 및 웹 작업을 사용하여 SharePoint Online 팀 회의실을 구축해야합니다. 나는 콘솔 응용 프로그램을 만들어 다음과 같은 설정으로 연속 웹 작업으로 게시 한 :Azure 웹 작업 - 대기열의 병렬 메시지 처리가 제대로 작동하지 않습니다.
트리거 기능은 다음과 같습니다 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);
}
내가받은 JSON 메시지를 deserialising있어
내부 ProcessQueueMsg 기능 클래스에서 다음 작업을 실행하십시오.
- 기존 사이트 모음에 하위 사이트를 만들고 있습니다.
- Pnp 프로비저닝 엔진을 사용하여 하위 사이트 (목록, 업로드 파일, 사용 권한, 빠른 점심 등)에 콘텐츠를 제공하고 있습니다.
대기열에 처리 할 메시지가 하나뿐이면 모든 것이 올바르게 수행됩니다.
그러나 처음 메시지가 처리되는 동안 지연 시간이 2 초인 큐에 두 개의 메시지를 보내면 다음 메시지가 클래스 속성을 덮어 쓰고 첫 번째 메시지가 완료됩니다.
별도의 스레드에서 각 메시지를 실행하려고했으나 트리거 기능이 내 기능 내에서 메시지 처리 전에 성공한 것으로 표시됩니다.이 방법으로 잠재적 예외/메시지 대기 행렬을 제어 할 수 없습니다.
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.");
}
내 사이트 제공하기 위해 병렬 메시지에 대한 내 처리 기능을 실행할 수있는 방법이 있나요을 방해하지 않고?
자세한 내용이 필요하면 알려주십시오.
미리 감사드립니다.