Сервисный брокер работает только впервые - PullRequest
1 голос
/ 18 июня 2019

Service Broker работает только в первый раз.

Я новичок в Service Broker и изучаю то же самое.Делать это в первый раз.Я подозревал, что это работает только в первый раз, поэтому я изменил название службы / контракта и очереди и снова попытался проверить это, это работало так же, как только это работало.Я снова изменил имя и попробовал снова, это сработало только один раз.

Создание контракта с сервисным брокером / Создание сервиса / очереди

IF NOT EXISTS(  SELECT '*' 
                FROM    sys.service_contracts  
                WHERE NAME = N'TESTContract1234')
BEGIN
        CREATE CONTRACT TESTContract1234
            ([http://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer] SENT BY INITIATOR)
END

    IF NOT EXISTS(  SELECT  '*' 
                FROM    sys.service_queues 
                WHERE   NAME = N'TEST_SCHEDULEDJOBQUEUE1234')
BEGIN
        create  QUEUE TEST_SCHEDULEDJOBQUEUE1234
        WITH STATUS = on, 
        ACTIVATION (    
            PROCEDURE_NAME = testing1_sp,
            MAX_QUEUE_READERS = 1, -- we expect max 20 jobs to start simultaneously
            EXECUTE AS 'dbo' );
END

IF NOT EXISTS(  SELECT '*' 
                FROM sys.services 
                WHERE NAME = N'//TESTJOBSERVICE1234')
BEGIN   
        CREATE SERVICE [//TESTJOBSERVICE1234] 
        AUTHORIZATION dbo
        ON QUEUE TEST_SCHEDULEDJOBQUEUE1234 (TESTContract1234)
END

SP, который выполняется в очереди

create table testing1
(
descr       varchar(255),
seqno       int identity(1,1),
currtime    date
)

create procedure testing1_sp
as
begin
set nocount on

insert into testing1(descr,currtime) values('Service Broker Sample',getdate())

set nocount off

end

Сценарий, используемый для тестирования

    declare @ConversationHandle UNIQUEIDENTIFIER    ,@TimeoutInSeconds udd_int

    SELECT @TimeoutInSeconds = DATEpart(s, dbo.RES_Getdate(0))--, @FirstRunOn);

BEGIN DIALOG CONVERSATION @ConversationHandle
    FROM SERVICE   [//TESTJOBSERVICE1234]
    TO SERVICE      '//TESTJOBSERVICE1234', 
                    'CURRENT DATABASE'
    ON CONTRACT     TESTContract1234
    WITH ENCRYPTION = OFF;

На уровне базы данных сервисный брокер включен. Я проверил то же самое с помощью имени столбца представления каталога sys.databases is_broker_enabled.В представлении каталога sys.conversation_endpoints доступна одна запись, а для нее - state_desc "STARTED_OUTBOUND"

Пожалуйста, помогите мне отладить проблему и понять, где я делаю ошибку.

Заранее спасибо.

...