2013-09-02 3 views
4

AngularJS 및 ASP.Net WebAPI를 사용하여 클라이언트 측 단일 페이지 응용 프로그램 (SPA)을 개발 중입니다.ASP.Net 웹 API의 메시지 대기열

SPA의 기능 중 하나는 대용량 CSV 파일을 업로드하고 서버에서 처리 한 다음 출력을 사용자에게 반환하는 것입니다.

분명히 이런 종류의 계산은 온라인으로 수행 될 수 없기 때문에 파일 수신을 담당하는 UploadController와 계산이 완료되면 사용자에게 알리는 PollingController를 구현했습니다.

클라이언트 측 응용 프로그램은 몇 초마다 PollingController를 모니터링합니다.

메시지 대기열에 대한 경험이 없지만 이러한 상황에서 메시지 큐가 필요하다는 메시지가 표시됩니다.

비 차단, 효율적인 방법으로이 기능을 구현하는 것이 어떻습니까? (이것은 윈도우 Azure 경우, 또는 작업자 역할) 장기 실행 작업의 경우

diagram

예 높게 평가 될 것이다

답변

6

나는 이것을 위해 메시지 기반 서비스 버스 프레임 워크를 사용 해왔다.

이벤트 버스를 통해 브로드 캐스팅되는 메시지를 수신하는 응용 프로그램 (Windows 서비스로 실행)을 작성합니다.

프론트 엔드는 이러한 메시지를 버스에 게시 할 수 있습니다.

.NET에서 가장 널리 사용되는 프레임 워크는 NServiceBus이지만 최근 상업화되었습니다. 또한 MassTransit을 볼 수도 있지만,이 문서는 매우 열악합니다. 당신이 할 것

워크 플로 :

  • MVC 응용 프로그램은
  • MVC 응용 프로그램은 "UploadReady"메시지를 게시하는 Windows 서비스 액세스 어떤 디렉토리에 업로드과 장소 받아들입니다.
  • 서비스는 메시지를 수신하고 파일을 처리하며 폴링 컨트롤러의 일부 상태를 업데이트합니다.
  • 폴링 컨트롤러는이 상태가 변경되는지 감시합니다. 일반적으로 DB 레코드 등.

서비스가 중단되거나 재배포되면 모든 처리가 대기열에 들어가고 다시 시작할 수 있으므로 다운 타임이 발생하지 않습니다.

+1

MSMQ를 직접 사용하는 것보다 NSeviceBus/MassTransit을 사용하면 어떤 이점이 있습니까? –

+1

그들은 백엔드 전송을 추상화하고 비즈니스 로직에만 집중할 수있게 해주고 내결함성, 재시도 등을 추가합니다. –

+0

대량 전송에 대한 문서를 체크 아웃 했으므로이 게시물이 작성된 이후로 많이 개선되었습니다 너의 시간 가치가있어. –

4

당신은 별도의 Windows 서비스 응용 프로그램이 필요합니다. IIS는 풀 재활용시 ASP.NET 프로세스를 중지시킬 수 있으며 작업이 완료되지 않습니다.

메시지 큐는 주로 통신용입니다. 웹과 작업자 부품간에 사용할 수 있습니다. 그러나 귀하의 데이터가 초 임계적인 것이 아니라면 거기에는 필요하지 않습니다. 데이터베이스, 캐시, 파일 시스템 또는 다른 100 가지 다른 방법을 사용하여 통신을 설정할 수 있습니다.

완료된 처리에 대해 클라이언트에 알리기 위해 SignalR을 사용할 수 있습니다.