即使我指定了接收顶部(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
知道我做错了吗?
谢谢,
乙
答案 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条。