Tsql ServiceBroker一次只接收一条消息

Tsql ServiceBroker一次只接收一条消息,tsql,sql-server-2008,service-broker,Tsql,Sql Server 2008,Service Broker,即使我指定ReceiveTop(25)等,我一次也只收到一条要排队的消息。不确定我在存储过程中做错了什么?可能是一些琐碎的事情,但我看不出有什么问题 存储过程: CREATE PROCEDURE dbo.SPP_DEQUEUE_MESSAGE AS BEGIN DECLARE @receiveTable TABLE( message_type sysname, message_body xml, message_dialog uniqueidentif

即使我指定ReceiveTop(25)等,我一次也只收到一条要排队的消息。不确定我在存储过程中做错了什么?可能是一些琐碎的事情,但我看不出有什么问题

存储过程:

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
知道我做错了什么吗

谢谢


B

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

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

选择sq.name, p、 排 来自sys.service_队列sq 将sys.internal\u表连接到sq.object\u id=it.parent\u id上 并且it.parent\u minor\u id=0 和it.internal_type=201 以i.object\u id=it.object\u id和i.index\u id=1上的i连接sys.index 将sys.partitions作为p.object\u id=i.object\u id和p.index\u id=i.index\u id上的p连接 哪里 sq.object\u id=it.parent\u id和 it.parent\u minor\u id=0和 it.internal_type=201


如果该队列中有多条消息,则您的接收中应该有多条消息。

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

发件人:

由 接收语句属于同一个 会话组


如果您想一次接收多条消息,请在一次对话中发送多条消息,或在接收端的一个对话组中发送多条消息。

队列中有多条消息,我将查看一下。我没有看到这一部分…这可能就是正在发生的事情。你能提供任何关于这一点的例子吗?我们从表插入触发器发送消息,因此必须为每个插入创建单独的对话。我希望一批接收所有可能的消息,但这不会发生,而且我看不到如何在单个组中移动对话(即使在“开始”对话框中与相关的会话组一起使用)