SQL Server Service Broker和批处理

时间:2015-03-17 03:34:59

标签: sql-server-2008-r2 messaging 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

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

1 个答案:

答案 0 :(得分:3)

RECEIVE只会将属于一个会话组的邮件取消。除非您进行明确的会话组管理,否则每个会话都是自己的组。如果您每次会话只发送一条消息,那么您最终只会RECEIVE - 每次只发送一条消息。这包含在Conversation Group Locks

RECEIVE是一个相当昂贵的语句,因此对于高吞吐量,您必须将更多消息组合在一起,通常是通过conversation reuse