Service Broker一次只接收一条消息

时间:2010-12-15 20:51:21

标签: tsql sql-server-2008 service-broker

即使我指定了接收顶部(25)等,我也只能获得一条消息一次出列。不确定我在我的sproc中做错了什么?可能是微不足道的,但我没有看到问题。

SPROC:

CREATE PROCEDURE dbo.SPP_DEQUEUE_MESSAGE

AS

BEGIN

DECLARE @receiveTable TABLE(
message_type        sysname,
message_body        xml,
message_dialog      uniqueidentifier);

    BEGIN TRANSACTION;

    WAITFOR
        ( RECEIVE TOP(25)
            message_type_name,
            message_body,
            conversation_handle  
          FROM TargetQueue1DB
            INTO @receiveTable
        ), TIMEOUT 3000;

    SELECT 
        *
    From @receiveTable;     

    Delete from @receiveTable;

COMMIT TRANSACTION;

END --End Sproc

知道我做错了吗?

谢谢,

2 个答案:

答案 0 :(得分:5)

我的猜测是每条消息属于不同的对话(因此默认情况下属于不同的对话组)。如果是这种情况,那么这是预期的行为。

来自Books Online - Receive (Transact-SQL)

  

a返回的所有消息   RECEIVE语句属于同一个   对话小组

如果您想同时接收多封邮件,请将单个会话中的多封邮件或group multiple conversations发送到接收端的单个会话组中。

答案 1 :(得分:0)

在运行proc之前,您知道该队列中有多少条消息吗?

如果您运行以下查询以获取所有队列中的计数

SELECT sq.name,     p.rows FROM sys.service_queues sq     将sys.internal_tables加入到sq.object_id = it.parent_id上         AND it.parent_minor_id = 0         AND it.internal_type = 201     在i.object_id = it.object_id和i.index_id = 1上加入sys.indexes i     在p.object_id = i.object_id和p.index_id = i.index_id上将sys.partitions作为p加入 哪里     sq.object_id = it.parent_id AND     it.parent_minor_id = 0 AND     it.internal_type = 201

如果该队列中有超过1条消息,您的接收应该会超过1条。