2017-12-30 19 views
0

대기열에 의해 트리거되는 Azure webjob이 있습니다. 대기열에는 대개 한 번에 하나의 항목 만 배치되지만, 매월 첫 번째 항목에는 많은 항목이 있습니다.하늘빛으로 방아쇠를 당긴 webjob이 한 번에 2 개의 메시지를 처리하기 시작했습니다

이 경우 항상 한 번에 하나의 대기열 항목을 처리하고 다음 처리를 처리하기 전에 처리를 완료했습니다.

그러나 몇 달 전부터 한 번에 두 개의 파일을 처리하기 시작 했으므로 문제가 발생했습니다.

나는 이것을 허용하도록 코드를 리팩터링 할 수 있지만 실제로는 시간이 없으며 반환은 최소화 될 것입니다. 나는 한번에 한 번에 하나의 아이템을 처리하기를 원하지만, 이것이 변화를 일으킬만한 것을 발견 할 수는 없다. 내가 알고 있어야하는 푸른 포털에 설정이 있습니까? 나는 트리거 자체와 관련된 코드가 변경된 것으로 믿지 않습니다.

이 수행 할 수 있습니다, 사전에

답변

0

물론 주셔서 감사합니다. WebJob은 Service Bus Queue 또는 Azure Storage Queue에 의해 트리거 될 수 있습니다. 두 가지 모두에 대한 정보가 있습니다.

은 기본적으로 푸른 저장 대기열

를 들어, QueueTrigger 한 번에 16 개의 메시지를 잡아하고 병렬로 처리합니다. 이 작업을 원하지 않으면 WebJob의 정적 void Main 메서드에서 JobHostConfiguration 인스턴스의 BatchSize 속성을 1로 설정해야합니다. 예 :

유사 서비스 버스 큐

static void Main(string[] args) 
{ 
    JobHostConfiguration config = new JobHostConfiguration(); 
    config.Queues.BatchSize = 8; 
    JobHost host = new JobHost(config); 
    host.RunAndBlock(); 
} 

, 당신은 JobHostConfiguration의 속성을 설정합니다. 서비스 버스를 사용하는 경우 설정이 조금 더 있습니다. 예 :

static void Main(string[] args) 
{  
    JobHostConfiguration config = new JobHostConfiguration(); 
    ServiceBusConfiguration serviceBusConfig = new ServiceBusConfiguration(); 
    serviceBusConfig.MessageOptions.MaxConcurrentCalls = 1; 
    config.UseServiceBus(serviceBusConfig); 

    JobHost host = new JobHost(config); 
    host.RunAndBlock(); 
} 
0

필자의 경우, 누군가가 Azure 앱 서비스를 2 개의 인스턴스로 수평 확장시킨 것이 문제였습니다. 그러나 저는 Rob의 대답을 가장 도움이되는 것으로 표시하고 있습니다.

관련 문제