2014-10-18 5 views
3

시간 기반 이벤트를 유지하기위한 최상의 설계는 무엇입니까? 예를 들어 사용자에게 미리 알림을 보내는 것과 같이 마지막으로 로그인 한 후 60 일이 지나면 어떻게 되나요?MVC5 웹 사이트에서 시간 기반 이벤트를 만드는 방법은 무엇입니까?

시스템은 현재 MVC5에 구축되어 있으므로 모든 체크와 물건을 트리거하고 모든 이벤트 기반 작업을 수행하는 기본 컨트롤러의 ActionExecuted에 cronjobs를 추가하려고합니다.

내가 생각한 또 다른 접근법은 실제로 데스크톱 응용 프로그램 (콘솔 응용 프로그램)을 만들고 그것을 항상 실행하고 새 사용자 등록에 대한 SQL 서버로부터 푸시 알림을받은 다음 목록을 유지하고 60 일 경과 후 이메일을 보내거나 하루에 한 번씩 서버에 쿼리하여 모든 사람의 마지막 로그인 날짜를 얻고 필요한 경우 모든 사용자에게 이메일을 보냅니다.

나는 SO에 또 다른 질문에이 ( http://www.quartz-scheduler.net를) 발견 : MVC - Run scheduled task even if nobody logs into app

그리고 그 시스템을위한 더 나은 옵션이 될 것인지 물어보고 싶은게?

더 나은 예는 매월 뉴스 레터를 일부 사용자에게 보내야한다는 것입니다. 어떻게 구현 될까요?

답변

1

그래서 결국 Quartz.NET을 사용하게되었습니다. MVC 애플리케이션에서 트리거와 작업을 만들고 개별 서버에서 트리거와 작업을 실행하는 콘솔 앱을 실행했습니다.

이 작업은 Scheduler.Start(); 콘솔 응용 프로그램에서 및 웹 응용 프로그램에서 필요가 없습니다.

또한 작업과 트리거는 RAM이 아닌 SQL 서버 (Azure SQL)에 저장되므로 두 시스템이 모두 액세스 할 수 있습니다.

<add key="quartz.scheduler.instanceId" value="AUTO" /> 
<add key="quartz.jobStore.clustered" value="true" /> 

두 시스템이 클러스터의 역할을해야합니다

나는 또한 시계가 두 번째로 동기화되었는지 확인하고있는 Web.config와의 App.config에 <quartz> 설정 부분에 일부 변수를 변경했다 !

관련 문제