我们是否必须始终在服务代理队列的激活存储过程中编写 while (1=1) 还是可选的?

do we have to write while (1=1) in activation stored procedures for service broker queues always or it's an optional?

w=12=will.year:w=11=will w=10=sh

必须有一些 boolean 表达式(例如 truefalse)他WHILE,这是命令的语法。

如果您想编写一个 WHILE 无限循环,您必须编写一些始终 return 为真的表达式。 1=1 是其中之一,但您可以写任何始终 return true(例如 0=010=10

这取决于你是否要连续处理队列。 (1=1) 始终 true 并创建一个无限循环,在该循环中它将等待一个项目出现在队列中并对其进行处理。

如果你想创建一个只处理单个项目的激活过程,你根本不需要循环。

一般代码是这样的

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

激活程序在无限循环中开始消息处理,如果在超时间隔(上例中为 3 秒)内没有收到任何消息,程序将终止。

如果我们有大量消息发送到队列,激活程序将启动并为所有集合加载一次内存(因为它在激活后等待消息),并在 3 秒后关闭最后收到的消息。因此,本例中的 while 循环减少了服务器的开销。

可以省略循环,但在这种情况下,将为队列中的每条消息触发激活过程,这可能会导致性能问题。