2016-11-12 1 views
3

나는 초당 100 개 이상의 요청을받는 wep api를 가지고 있으며 빠르게 답해야합니다.이벤트 허브 send 데이터 작업에 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을 참조하십시오.

대기열에 항목을 넣는 것은 항목을 읽는 프로세스가 분리되어있는 한 매우 빠르고 안전해야합니다. 웹 응용 프로그램이 실패하거나 이벤트가 손실되지 않고 대기열에 저장된 모든 이벤트가 중단 될 때 보너스로 사용됩니다. 간단한 웹 작업 또는 Azure Function (https://azure.microsoft.com/en-us/documentation/articles/functions-bindings-storage/)과 함께 Azure Storage Queue (https://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-queues/)을 사용하여 이벤트를 처리 할 수 ​​있습니다.

Web Api - Fire and Forget의 경우 QueueBackgroundWorkItem 옵션과이 답변을 사용하는 대신 왜이 설정을 사용하는지에 대한 배경 정보는 http://blog.stephencleary.com/2014/06/fire-and-forget-on-asp-net.html을 참조하십시오.

+0

답장을 보내 주셔서 감사합니다. 사실이 생각이 합리적인지 궁금 해서요? 난 그냥 내 API를 안정적으로 유지하고 싶지 않아 어떤 오류 또는 시간 초과 때문에 API 클라이언트 호출자가 관심을 가지기 때문에 천천히 가고 싶지 않아. Btw 메신저는 이미 배치를 사용하여 메시지를 보냅니다. –

+0

업데이트 된 답변보기 –