我是否正确理解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
如果他们来自同一个对话,我只会返回五行?目前我一次发送一条对话的消息,但如果队列中有十条这样的消息,那么它们一次只能返回一条消息。
答案 0 :(得分:3)
RECEIVE
只会将属于一个会话组的邮件取消。除非您进行明确的会话组管理,否则每个会话都是自己的组。如果您每次会话只发送一条消息,那么您最终只会RECEIVE
- 每次只发送一条消息。这包含在Conversation Group Locks。
RECEIVE
是一个相当昂贵的语句,因此对于高吞吐量,您必须将更多消息组合在一起,通常是通过conversation reuse。