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"
Пожалуйста, помогите мне отладить проблему и понять, где я делаю ошибку.
Заранее спасибо.