Tsql ServiceBroker一次只接收一条消息
即使我指定ReceiveTop(25)等,我一次也只收到一条要排队的消息。不确定我在存储过程中做错了什么?可能是一些琐碎的事情,但我看不出有什么问题 存储过程: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
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
如果该队列中有多条消息,则您的接收中应该有多条消息。我猜每条消息属于不同的会话(因此默认情况下属于不同的会话组)。如果是这种情况,那么这是预期的行为 发件人: 由 接收语句属于同一个 会话组
如果您想一次接收多条消息,请在一次对话中发送多条消息,或在接收端的一个对话组中发送多条消息。队列中有多条消息,我将查看一下。我没有看到这一部分…这可能就是正在发生的事情。你能提供任何关于这一点的例子吗?我们从表插入触发器发送消息,因此必须为每个插入创建单独的对话。我希望一批接收所有可能的消息,但这不会发生,而且我看不到如何在单个组中移动对话(即使在“开始”对话框中与相关的会话组一起使用)