2017-09-08 13 views

답변

1

일반적으로 코드가이

Create Proc test_act_sp 
AS 
BEGIN 
    WHILE (1=1) 
     BEGIN 
      WAITFOR 
      ( 
       RECIEVE TOP(1) ... FROM Queue 
      ) , TIMEOUT 3000; --Timeout value can be changed. 

      IF (@@ROWCOUNT = 0) 
      BEGIN 
       BREAK; 
      END 
     ........ 
     ........ 
     ........ 
    END 
END 

활성화 절차처럼 보인다는 무한 루프 내에서 메시지 처리를 시작하고 timout 구간 내 (상기 예에서는 3 초)에 메시지를받을하지 않는 경우, 절차는 것 종료된다.

대량의 메시지가 대기열로 보내지면 활성화 절차가 시작되고 모든 설정에 대해 활성화 절차가 메모리에로드됩니다 (활성화 후 메시지를 기다리면서). 그러면 3 초 후에 종료됩니다. 마지막으로받은 메시지. 따라서이 경우 while 루프는 서버의 오버 헤드를 줄입니다.

루프를 생략 할 수도 있지만이 경우 대기열에있는 각 메시지에 대해 활성화 절차가 트리거되므로 성능 문제가 발생할 수 있습니다.

0

그에게 WHILE을 다음과 같은 몇 가지 부울 표현 (사실 또는 거짓입니다 somehting)이 있어야합니다, 그것은 명령 구문입니다.

무한히 반복되는 WHILE 루프를 작성하려면 항상 true를 반환하는 식을 작성해야합니다. 1=1 그들 중 하나이지만, 당신은 항상 반환 아무것도 쓸 수 사실 (0=0, 10=10 등)

1

그것은 당신이 지속적으로 큐를 처리 할 것인지 여부에 따라 달라집니다. (1=1) 은 항상 true이고 항목이 대기열에 나타나서 처리 할 때까지 기다리는 무한 루프를 만듭니다.

단일 항목 만 처리하는 정품 인증 프로세스를 만들려면 루프가 필요 없습니다.