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

Откуда:
Сообщений: 219
Есть 2 сервера.
Созданы и прописаны сертификаты, как описано здесь http://support.microsoft.com/kb/915852

На первом сервере созданы контракты, сервисы, очереди и т.п.
автор
CREATE MESSAGE TYPE [Document_Type] VALIDATION = NONE
CREATE CONTRACT [NewDocument] ([Document_Type] SENT BY ANY)
CREATE CONTRACT [EditDocument] ([Document_Type] SENT BY ANY)
Create QUEUE [DocumentQueue]
Create SERVICE [DemoDocumentService] ON QUEUE [DocumentQueue]([NewDocument],[EditDocument])

GRANT SEND ON SERVICE::[DemoDocumentService] TO remcert

CREATE REMOTE SERVICE BINDING [Certificate_Binding_on_server_Document]
TO SERVICE 'CD_clientsDocumentService'
WITH USER = remcert,
ANONYMOUS=Off

CREATE ROUTE [CD_clientsDocumentService_Route]
WITH
SERVICE_NAME = 'CD_clientsDocumentService',
address = 'TCP://XX.XX.XX.XX:4022';


На втором тоже все создано
автор
CREATE MESSAGE TYPE [Document_Type] VALIDATION = NONE
CREATE CONTRACT [NewDocument] ([Document_Type] SENT BY ANY)
CREATE CONTRACT [EditDocument] ([Document_Type] SENT BY ANY)
Create QUEUE [dbo].[DocumentQueue] WITH STATUS = ON , RETENTION = OFF, ACTIVATION (STATUS

=ON,PROCEDURE_NAME=dbo.queue_read_Document,MAX_QUEUE_READERS =1,EXECUTE AS OWNER)
CREATE SERVICE [CD_clientsDocumentService] ON QUEUE [DocumentQueue]([NewDocument],[EditDocument])
GRANT SEND ON SERVICE::[CD_clientsDocumentService] TO remcert
GO
CREATE REMOTE SERVICE BINDING [Certificate_Binding_on_server_Document]
TO SERVICE 'DemoDocumentService'
WITH USER = remcert,
ANONYMOUS=Off

CREATE ROUTE [DemoDocumentServiceRoute]
WITH
SERVICE_NAME = 'DemoDocumentService',
address = 'TCP://YY.YY.YY.YY:4022';


С первого на второй отправляется сообщение.
автор
DECLARE @conversationHandle uniqueidentifier
-- Start dialog.
BEGIN DIALOG @conversationHandle
FROM SERVICE [DemoDocumentService]
TO SERVICE 'CD_clientsDocumentService'
ON CONTRACT [NewDocument]
WITH ENCRYPTION = ON;

-- Send message.
SEND ON CONVERSATION @conversationHandle
MESSAGE TYPE [Document_Type] (@xml_)

На втором сервере процедура dbo.queue_read_Document обрабатывает сообщение
автор
ALTER proc [dbo].[queue_read_Document]
as
Begin
Begin Transaction
WAITFOR
(
RECEIVE TOP (1)
@conversation_handle=conversation_handle,
@service_contract_name=service_contract_name,
@MessageXML =Cast(message_body as xml)
FROM DocumentQueue
), Timeout 3000

IF (@@Rowcount=0 or @@Error<>0)
BEGIN
Rollback tran
Goto Done
End
Else
BEGIN
if @service_contract_name='NewDocument'
Begin
-- Обработка сообщения
End conversation @conversation_handle
End
END
Commit tran
END


Данные второй сервер получает и обрабатывает, но сообщения так и остаются висеть в sys.transmission_queue как на отправителе, так и на получателе. Причем на отправителе поле is_end_of_dialog=1
31 окт 11, 18:38    [11528835]     Ответить | Цитировать Сообщить модератору
 Re: Не удаляются сообщения из sys.transmission_queue в Service Broker  [new]
Alex1975
Member

Откуда:
Сообщений: 219
Да, еще на втором сервере крутится еще одна своя очередь, которая в той же базе и обрабатывается.
31 окт 11, 18:49    [11528887]     Ответить | Цитировать Сообщить модератору
 Re: Не удаляются сообщения из sys.transmission_queue в Service Broker  [new]
mike909
Member

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

А Вы точно следовали инструкциям по указанной Вами же ссылке ?
А где что ни будь про сертификаты, полльзователи, права на connect ?
Вот Вам для информации: Service Broker: Проблема при передаче сообщений в обратную сторону
31 окт 11, 18:51    [11528893]     Ответить | Цитировать Сообщить модератору
 Re: Не удаляются сообщения из sys.transmission_queue в Service Broker  [new]
Alex1975
Member

Откуда:
Сообщений: 219
mike909, спасибо. Еще раз пересоздал сертификаты с разрешениями для разных пользователей (хотя в примере от Microsoft пользователь один) и все заработало.
2 ноя 11, 14:42    [11539759]     Ответить | Цитировать Сообщить модератору
 Re: Не удаляются сообщения из sys.transmission_queue в Service Broker  [new]
mike909
Member

Откуда:
Сообщений: 662
Alex1975
mike909, спасибо. Еще раз пересоздал сертификаты с разрешениями для разных пользователей (хотя в примере от Microsoft пользователь один) и все заработало.

Это не один и тот же пользователь, т.к. это разные сервера
Можно использовать для двух серверов "одного и того же пользователя" - одноименца как в примере по ссылке.
Хотя, конечно, можно использовать один сертификат и одного пользователя на всех серверах (создавая его из файла, как в примере MS).
Но в целях безопасности и, просто - чтоб самому не запутаться, я этих пользователей называю по разному, да и сертификаты выдаю каждому серверу свой.
2 ноя 11, 18:25    [11542067]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить