SQL Server Service Broker和批处理



我对SQL Server(本例中为2008 R2)Service Broker的理解是否正确,即消息只根据会话进行批处理?换句话说,如果我有这样的查询:

DECLARE @messages TABLE(
     handle UNIQUEIDENTIFIER,
     message_body NVARCHAR(MAX),
     message_type_name SYSNAME
);
RECEIVE TOP 5
    conversation_handle,
    message_body,
    message_type_name
FROM dbo.MyMessageQueue
INTO @messages
SELECT conversation_handle, message_body FROM @messages

如果他们来自同一次对话,我只会得到五行回复?目前,我一次只发送一条消息,但如果队列中有十条这样的消息,那么每次只返回一条。

RECEIVE将仅使属于一个对话组的消息出列。除非进行明确的会话组管理,否则每个会话都是自己的组。如果你每次只发送一条消息,那么你每次只会发送一条RECEIVE消息。这包含在会话组锁定中。

RECEIVE是一个运行成本相当高的语句,因此为了获得高吞吐量,您必须将更多的消息分组在一起,通常是通过会话重用。

最新更新