2011-01-05 4 views
0

대기열에있는 작업을 백그라운드에서 순차적으로 (또는 병렬로 n 개의 스레드로) 실행하여 시스템로드를보다 잘 제어해야합니다.Microsoft의 작업에 대한 순차적 백그라운드 처리

작업은 테이블을 큐로 사용하여 SQL Server 2008 데이터베이스에서 대기합니다.

대기열에서 요소를 제거하고 일부 처리 코드를 실행하는 간단한 "엔진"이 필요합니다. 처리 코드는 C#/.net입니다.

내 기본 관심사는 단순성, 테스트 가능성, 간단한 배포 및 신뢰성입니다.

BizTalk 또는 Windows 서비스 같은 기술에 대한 권장 사항을 찾고 있습니까?

+0

무엇을 의미합니까? 당신은 이미 SQL과 C#을 사용할 것이라고 말했습니다. 그래서이 코드를 작성하는 방법을 묻고 있습니까? 아직 아무 것도 시도하지 않았습니까? 작동하지 않습니다. – spinon

+0

죄송합니다 .. 내가 찾고있는 것은 "엔진"부분에 대한 기술 아이디어입니다. 나는 모든 새로운 기술에 대한 최신 정보가 아닙니다. 서버로 시작하여 항상 실행 상태를 유지해야하기 때문에 콘솔 앱보다 '더 나은'기능이 필요하다고 느낍니다. – squareeyes

답변

1

여기에 몇 가지 옵션이 있지만 Writing a windows service은 내가 선택할 것입니다. 링크를 확인하십시오. 기본 예제를 제공하고 시작하는 데 도움을 줄 수 있습니다.

다른 옵션은 SQL Server Agent를 스케줄러로 사용하여 필요할 때 C# 실행 파일을 시작하는 것입니다. 그러나 이것은 나에게 해킹처럼 느껴지므로 큰 선택이 아닙니다.

0

어떤 직업에 대해 이야기하고 있습니까? 작업 자체가 데이터베이스 작업으로 구성되는 경우 가장 좋은 방법은 internal Activation을 SQL Server에 사용하는 것입니다. 내부 활성화는 C#/Net 코드도 시작할 수 있습니다. 예를 들어 Asynchronous procedure execution을 참조하십시오. 정품 인증을 사용하는 것이 가장 신뢰할 수있는 방법입니다. 예약 된 작업은 미러링 및 클러스터링 장애가 발생하더라도 복구 할 수 있습니다. 실제로 서버의 충돌 및 새 호스트의 데이터베이스 백업에서 서버를 다시 작성한 후에도 예약 된 작업이 활성화되어 실행될 수 있으므로 매우 안정적입니다. 그러나 작업이 '외부'작업을 수행해야하는 경우에는 사용하지 않아야합니다. 웹 서비스에 연결하십시오. 이러한 서비스의 경우 External Activator을 사용하고 SQL Server 정품 인증 메커니즘에 고유 한 안정성 및 자체 균형 조정 규모를 활용할 수 있지만 궁극적으로 여전히 Windows 서비스 및 Service Broker 큐입니다.

내장 SQL 대기열의 오버 헤드가 높다고 생각되면 Using tables as Queues을 검토하고 기본 사항을 고수하는 것이 좋습니다. 대기열 테이블에 팬시 또는 스캔을 추가하지 마십시오. 대기열로 테이블을 사용하는 일반적인 문제인 교착 상태로 인해 시스템이 침울하게됩니다.

관련 문제