Компонент Service Broker получает только одно сообщение за раз - PullRequest
3 голосов
/ 15 декабря 2010

Даже когда я указываю Receive Top (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

Есть идеи, что я делаю неправильно?

Спасибо,

B

Ответы [ 2 ]

5 голосов
/ 16 декабря 2010

Я предполагаю, что каждое сообщение относится к другому разговору (и, следовательно, по умолчанию к другой группе разговоров).Если это так, то это ожидаемое поведение.

От Электронная документация - получение (Transact-SQL) :

Все сообщения, возвращаемыеоператор RECEIVE принадлежит одной и той же группе разговоров

Если вы хотите получать несколько сообщений одновременно, отправьте несколько сообщений за один разговор или сгруппируйте несколько разговоров в одну группу разговоровпринимающая сторона.

0 голосов
/ 16 декабря 2010

Знаете ли вы, сколько сообщений находится в этой очереди до запуска процедуры?

Если вы выполните следующий запрос, чтобы получить счетчик во всех ваших очередях

ВЫБЕРИТЕ sq.name, p.rows FROM sys.service_queues sq Присоединитесь к sys.internal_tables it ON sq.object_id = it.parent_id AND it.parent_minor_id = 0 AND it.internal_type = 201 Присоединить sys.indexes как i к i.object_id = it.object_id и i.index_id = 1 Присоединить sys.partitions как p к p.object_id = i.object_id и p.index_id = i.index_id ГДЕ sq.object_id = it.parent_id AND it.parent_minor_id = 0 AND it.internal_type = 201

Если в этой очереди более 1 сообщения, вы должны получить более 1 вВаше получение.

...