2016-10-23 2 views
1

WebJob을 처음 사용하기 때문에 장시간 실행되는 작업을 처리하기 위해 기존 MVC Web App (Azure에서 호스팅 됨)에 하나 추가해야합니다. 장기 실행 작업은 SOAP/XML을 통해 데이터를 검색하기 위해 여러 외부 웹 서비스를 호출하고이 데이터를 SQL db에 저장 한 다음 데이터를 변환하고 저장된 데이터를 다시 데이터베이스에로드하는 ETL 유형 프로세스를 수행합니다. 이 프로세스는 끝에서 끝까지 실행하는 데 20 ~ 30 분이 소요될 수 있습니다.MVC Web App에서 WebJob으로 장기 실행 작업 마이그레이션 동일한 프로젝트 및 코드 재사용을 참조하십시오.

원래 웹 응용 프로그램은 장기 실행 작업을 시작하고 처리하는 데 책임이 있지만 제대로 작동하지 않으며 이후이 프로세스를 WebJob으로 옮기기로 결정했습니다. 말이된다?

장기 실행 작업에 대한 대부분의 논리는 서비스 계층 내부에 존재하며 웹 응용 프로그램 내부의 컨트롤러 동작은 작업을 "시작"하는 데 책임이 있습니다.

웹 응용 프로그램은 DI 용으로 Autofac을 사용하고 있습니다.

WebJob 응용 프로그램 내에서 코드를 복제 할 필요없이 웹 응용 프로그램에서 기존 Autofac 구성을 공유/재사용하는 가장 좋은 방법은 무엇입니까? 즉 WebJob이 MVC 웹 응용 프로그램 프로젝트를 참조 할 수 있습니까?

+1

Autofac을 사용하는 경우 재사용 할 수있는 모듈을 만들 수 있습니다. DI 등록을 별도의 어셈블리에 넣고 MVC와 웹 잡을 참조하십시오. DI 등록을 다시해야한다고 생각하지 않습니다. DI는 응용 프로그램 구성입니다. 게다가 나는 모든 등록이 다른 범위를 가질 것이므로 어떤 것도 또는 몇 가지를 재사용 할 수 없을 것이라고 확신합니다. – Thomas

+0

또한 Webjob은 의존성을 주입하는 트릭을 수행 할 수있는 IJobActivator를 노출합니다. – Thomas

답변

0

당신이 아직도 프로세스를 분리하고 있는지 궁금합니다. 귀하의 설명에서 알기가 어렵습니다. 컨트롤러가 작업을 "시작"한다고 말하면 어떻게됩니까? 컨트롤러가 저장소 대기열에 새 메시지를 만들고 동일한 대기열에 새 메시지를 수신하면 webjob 트리거를 갖도록 할 수 있습니다. 이것은 레이어를 분리하는 "표준"방법입니다. webjobs API는 저장 대기열을위한 바인딩을 내장하고 있습니다. 서비스 계층의 아키텍처에 대해서는 인터페이스를 사용하여 서비스 계층을 호출하고 인터페이스와 서비스가 별도의 어셈블리/dll로 구현되도록 응용 프로그램 (웹 응용 프로그램 및 웹 작업)을 빌드하면 모든 것이 가능해야합니다 Autofaq와 같은 DI 컨테이너 도구로 잘 작동합니다. 프로세스가 서비스를 호스팅하는 방식과 관련이 없습니다.

프로세스 1 : 웹 응용 프로그램 - -> 사용 IJobService.CreateJob는()> 스토리지 큐

프로세스 2에 메시지를 넣습니다 : 웹 작업 [트리거 저장에서 큐] -> IJobService.Process()를 사용 -> 업데이트 SQL 데이터베이스