SQL 服务器 Service Broker 和批处理

SQL Server Service Broker and batches

我对 SQL 服务器(本例中为 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-ing 一条消息。 Conversation Group Locks.

中对此进行了介绍

RECEIVE 对 运行 来说是一个相当昂贵的声明,因此为了高吞吐量,您必须将更多消息组合在一起,通常通过 conversation reuse.