2011-08-18 2 views
3

MSMQ에 대해 배우고 있으며이를 사용하여 소비자 용 ASP.NET MVC 웹 사이트의 전자 메일 및 텍스트 메시지를 별도의 클라이언트 응용 프로그램에서 처리 할 수 ​​있습니다.SQL Server 삽입 도구 용 버퍼로 MSMQ 사용

SQL Server 데이터베이스가 누락 된 경우 드라이브 또는 손상된 데이터베이스 배포를 스왑하는 중일 때 로컬 MSMQ 대기열에 시간이 중요하지 않은 삽입을 대기열에 넣으면 가동 시간이 향상됩니까?

데이터베이스를 변경하는 동안 이론적으로 큐 처리 (지속성)를 일시 중지/다시 시작할 수 있습니다. 누구든지 이것을 시도 했습니까? 아니면 더 좋은 방법이 있습니까?

+0

SQL Server 용 버퍼로 MSMQ를 사용하는 것이 일반적인 구현입니다. –

답변

3

나는 배달을 보장하기 위해 이것을 구현 한 팀에 속해있었습니다. MSMQ를 사용하여 삽입 요청을 데이터베이스 서버로 전달했습니다. 데이터베이스 서버는 자체 서비스가 실행되어 요청을 대기열에서 제외하고 삽입을 실행 한 다음 메시지를 확인하여 전달을 보장합니다. 그것은 1 년 넘게 지금까지 운영되어 왔고, 왜 작동하지 않는지 알아 내려고하지 않았습니다 ... 나에게 꽤 단단한 것처럼 보입니다.

+0

어떻게 쿼리를 저장 했습니까? 청취자에 의해 잡아 당겨지는 "INSERT INTO ..." –

+0

정보를 저장하는 사용자 지정 메시지 클래스를 만들었습니다. 이러한 메시지 클래스는 보장 된 배달 기술을 사용하여 MSMQ 전송을 통해 보냈습니다. DB 서버에는 MSMQ 리스너가 대기열에서 꺼내어 삽입을 실행했습니다. –

+0

"대기열에서 꺼낸 MSMQ Listener"에 대해 설명해 주시겠습니까? – cja

1

이것은 응용 프로그램의 기능과 방법에 따라 달라지기 때문에 매우 주관적입니다. 일반적으로 MSMQ와 같은 것은이 용도로 사용되지 않으며, 오히려 원하는 데이터베이스에 고 가용성 클러스터링을 설정하려고합니다. 대부분의 경우 데이터베이스가 완전히 중단되는 경우는 거의 없으며 일반적으로 대부분의 LOB 응용 프로그램에서 더 큰 문제는 어떤 이유로 든 DB가 다운 된 동안 입력 된 데이터를 저장하는 것보다 더 큰 문제입니다.

생각할 오버 헤드가 있습니다. 데이터베이스에 대한 INSERT 작업은 상대적으로 빠릅니다 (보다 큰 스키마에서). 일련 번호 을 쓰고을 큐에 넣고 무언가를에 집어 넣고 삽입 조작을하면 응용 프로그램에 많은 양의 지연이 추가 될 것입니다. 실제로 그 사실을 설명해야합니다. 이제 모든 것이 비동기 적입니다.

MSMQ 은 응용 프로그램의 한쪽 끝에서 다른 끝으로 물건을 배달하는 데 사용될 수 있으므로이 시나리오가 바람직한 경우가 있다고 가정합니다. 대부분의 경우 DB를 신뢰하고 MSMQ를 사용하여 비동기 처리를 수행하고 프로세스 간 및 시스템 간 통신을 수행하는 것이 더 나을 것입니다.

4

로컬로 큐에 저장하여 고 가용성을 찾으려면 Service Broker을 IIS/ASP 인스턴스와 함께 배치 한 SQL Express 인스턴스에 배포해야합니다. MSMQ를 통한 SSB 사용의 이점은 메시지 저장소와 데이터 저장소 (일관된 백업/복원, 일관된 장애 조치 (failover) 단위)간에 일관성을 유지하고로드시 MSMQ보다 훨씬 확장 성이 뛰어나며 tw 위상 - DTC가 DB 삽입 (dequeue/insert에 하나의 로컬 DB 트랜잭션을 사용할 수 있음)과 함께 MSMQ dequeue를 조정하고 보류중인 메시지 (SELECT .. FROM queue)의 쿼리 가능성을 제공하고 DB HA/DR 솔루션과 통합됩니다 (클러스터 장애 조치/미러링), 당신은 DB가 activation을 포함하고 익숙한 T-SQL 프로그래밍 환경에서 모두 작동합니다. MSMQ의 가장 큰 장점은 클라이언트 측 C#/Net API 지원입니다.

+0

로컬 SQL Express에 대한 큐을 원격 SQL Server와 트랜잭션 방식으로 일치시킬 수 없었습니다.DTC는 많은 고 가용성 솔루션과 맞지 않습니다. – usr

+0

@usr : SSB는 각 끝 (SEND, RECEIVE)에서 트랜잭션 일관성이 있지만 메시징 응용 프로그램은 다른 방법으로 일관성을 유지합니다. http://cs.brown.edu/courses/cs227/archives/2012/papers/weaker/cidr07p15.pdf를 권해드립니다. –