2009-03-23 5 views
2

SQL Service 2005 Service Broker를 처음 사용했습니다. 대기열을 만들고 성공적으로 대화를 나눴습니다. 그러나 "스로틀"메시지를 정렬하고 싶습니다. 어떻게해야하는지 잘 모르겠습니다.Service Broker 큐 플러딩을 줄이는 방법은 무엇입니까?

메시지는 다중 사용자 응용 프로그램에서 호출하는 저장 프로 시저에서 전송됩니다. 20 명의 사용자가이 proc을 30 초 내에 각각 한 번 호출하게 만들면 한 번만 전송하면됩니다. 그래서 메시지가 지난 30 초 이내에 보내 졌는지 확인하기 위해 proc에서 어떤 방법이 필요하다고 생각합니까? 그렇게 할 수있는 방법이 있습니까?

내가 가진 한 가지 아이디어는 요청 대기열 활성화 proc가 호출되었는지를 나타내는 "응답"대기열로 메시지를 보내는 것입니다. 그럼 내 저장된 proc (사용자 애플 리케이션에 의해 호출) 특정 메시지가 최근에 호출되었는지 참조하십시오. 문제는 응답 대기열을 엉망으로 만들고 싶지 않다는 것입니다. 메시지가 존재하는지 확인하기 위해 대기열 (수신하지 않음)에서 엿볼 수 있습니까?

또는 내가 수행 한 작업을 수행하는 더 간단한 방법이 있습니까?

답변

4

예 대기열을 들여다보고 예전에 메시지가 있는지 확인할 수 있습니다. RECEIVE 대신 SELECT를 사용하여 큐를 쿼리하기 만하면 데이터를 볼 수 있습니다.

더 나은 방법은 메시지를 보내고 메시지를받는 저장 프로 시저를 사용하여 메시지를 버려야하는지 결정하는 것입니다.

성능 문제가없는 한 번에 수십만 개의 메시지를 서비스 브로커에 보냅니다.

성능 문제가있는 경우 Service Broker 성능을 향상시키는 가장 빠르고 쉬운 방법이므로 대화 당 하나 이상의 메시지를 보내보십시오.

1

SB에서이 작업을 수행 할 수 있는지 확실하지 않지만 메시지를 보낼 때 업데이트 된 타임 스탬프 입력란이있는 테이블 만 있으면됩니다. proc은 30 초를 초과하는 시간을 확인하고 전송합니다.

관련 문제