我对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
是一个运行成本相当高的语句,因此为了获得高吞吐量,您必须将更多的消息分组在一起,通常是通过会话重用。