5

Receive Top(25) などを指定しても、一度に 1 つのメッセージしかデキューされません。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

私が間違っていることは何ですか?

ありがとう、

B

4

2 に答える 2

5

私の推測では、各メッセージは異なる会話に属しています (したがって、既定では異なる会話グループに属しています)。この場合、これは予期された動作です。

オンライン ブックから- 受信 (Transact-SQL) :

RECEIVE ステートメントによって返されるすべてのメッセージは、同じ会話グループに属します

一度に複数のメッセージを受信したい場合は、1 つの会話で複数のメッセージを送信するか、受信側で複数の会話を 1 つの会話グループにグループ化します。

于 2010-12-16T09:51:15.063 に答える
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 で sys.indexes を i として結合.object_id および i.index_id = 1 sys.partitions を p.object_id = i.object_id および p.index_id = i.index_id で p として結合します WHERE sq.object_id = it.parent_id AND it.parent_minor_id = 0 AND it.internal_type = 201

そのキューに複数のメッセージがある場合は、受信で複数のメッセージを取得する必要があります。

于 2010-12-15T23:11:57.460 に答える