Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SQL Broker: двоится запись в очереди  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Засылаю запись в очередь:

declare @dialog_handle UNIQUEIDENTIFIER        
BEGIN DIALOG @dialog_handle
FROM SERVICE ServicePump
TO SERVICE 'SEARCH_SERVICE'
ON CONTRACT [SEARCH_SERVICE_CONTRACT]
WITH ENCRYPTION = OFF;
SEND ON CONVERSATION @dialog_handle	MESSAGE TYPE SEARCH_REQUEST_MSG(@message_xml) ;
END CONVERSATION @dialog_handle;


в очереди появляются две записи

queuing_order sequence_message_num validation
------------- -----------------------  ---------
167               0                                X
168               1                                E 


Вторая типа конец диалога, все вроде бы нормально.
Но в процедуре активации (MAX_QUEUE_READERS = 1 )

приходит два сообщения, оба с четным тем же номером, оба с валидацией E.
В одном сеансе активации процедуры первое приходит, забирается, обрабатывается, закрывается диалог, делается коммит.....Но потом через 20-40 секунд забирается второе такое же...

Что не так? как получать только одно сообщение?

Да, чтение в процедуре делается так:

WHILE 1 = 1
    BEGIN
	set @error = 0

	BEGIN TRANSACTION
        BEGIN TRY;
			WAITFOR (
			RECEIVE TOP(1)
			   @queuing_order = queuing_order,
			   @message_sequence_number = message_sequence_number,
			   @conversation_handle = conversation_handle,
			   @message_type_name = message_type_name,
			   @message_xml = message_body,
			   @message_body =
			   CASE
				  WHEN validation = 'X' THEN CAST(message_body AS XML)
				  ELSE CAST(N'<none/>' AS XML)
			   END
			   FROM [dbo].[QueueSearch]), TIMEOUT 50;

 		          select @nRows=@@ROWCOUNT,@nerror=@@ERROR;

			IF @nRows = 0 OR @nerror <> 0 OR @conversation_handle IS NULL 
			BEGIN
				set @nerr=@nerror; goto lexit;
				if @@TRANCOUNT>0 ROLLBACK TRAN;	
				BREAK;				
			END
			if @@TRANCOUNT>0 
			begin
				END CONVERSATION @conversation_handle;
				COMMIT TRANSACTION
			end


-- обработка
22 авг 13, 15:28    [14742446]     Ответить | Цитировать Сообщить модератору
 Re: SQL Broker: двоится запись в очереди  [new]
mike909
Member

Откуда:
Сообщений: 662
Winnipuh,

declare @conversation_handle uniqueidentifier = NEWID()

WAITFOR (
			RECEIVE TOP(1)
			@conversation_handle = conversation_handle
			FROM [dbo].[QueueSearch]), TIMEOUT 1;
select @conversation_handle

Переменные чистить надо
22 авг 13, 15:37    [14742513]     Ответить | Цитировать Сообщить модератору
 Re: SQL Broker: двоится запись в очереди  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
mike909
Winnipuh,

declare @conversation_handle uniqueidentifier = NEWID()

WAITFOR (
			RECEIVE TOP(1)
			@conversation_handle = conversation_handle
			FROM [dbo].[QueueSearch]), TIMEOUT 1;
select @conversation_handle

Переменные чистить надо


да, надо, но как это влияет на то, что RECEIVE вытаскивает одну и ту же запись два раза с типом конец диалога?
22 авг 13, 16:18    [14742864]     Ответить | Цитировать Сообщить модератору
 Re: SQL Broker: двоится запись в очереди  [new]
Glory
Member

Откуда:
Сообщений: 104751
Winnipuh
да, надо, но как это влияет на то, что RECEIVE вытаскивает одну и ту же запись два раза с типом конец диалога?

Вы же проверяете переменные, а не то что "вытаскивает RECEIVE"
22 авг 13, 16:29    [14742940]     Ответить | Цитировать Сообщить модератору
 Re: SQL Broker: двоится запись в очереди  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Glory
Winnipuh
да, надо, но как это влияет на то, что RECEIVE вытаскивает одну и ту же запись два раза с типом конец диалога?

Вы же проверяете переменные, а не то что "вытаскивает RECEIVE"



да.... всё ясно, спасибо всем.
22 авг 13, 16:36    [14743020]     Ответить | Цитировать Сообщить модератору
 Re: SQL Broker: двоится запись в очереди  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Winnipuh
WHILE BEGIN TRY goto lexit; BREAK
Определю пол ребёнка по фотографии бабушки.
И угадаю мелодию с 3х нот.
22 авг 13, 16:38    [14743036]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить