SQL 队列不启动激活过程 SQL Server

问题描述 投票:0回答:1

SQL Server 2019

我正在尝试从触发器启动存储过程(以便触发器保持精简)来处理某些生产设施中的数据。使用队列/消息等对我来说是新的

我创建了一个队列和服务:

CREATE QUEUE [dbo].[StoredProcedureQueue]
CREATE SERVICE [StoredProcedureService] ON QUEUE [dbo].[StoredProcedureQueue];
ALTER QUEUE dbo.StoredProcedureQueue
    WITH ACTIVATION (
        PROCEDURE_NAME = dbo.ActivationProcedure,
        MAX_QUEUE_READERS = 1,
        EXECUTE AS OWNER)

激活过程很简单(只是暂时,稍后会触发不同带参数的存储过程)

CREATE or ALTER PROCEDURE dbo.ActivationProcedure
AS
BEGIN
    print  'test'
    INSERT INTO tbl_Log (LogType, LogText) values ('test', 'ActivationProcedure')
END

但是还没开始

表触发器会执行类似的操作(但我手动启动):

--------------------
DECLARE @message_body XML;
DECLARE @dlg UNIQUEIDENTIFIER;
-- Construct the XML message body
SET @message_body = '
    <Message>
        <barcode>PS23060094/9.9</barcode>
        <palletweight>993</palletweight>
        <timestamp>' + CONVERT(NVARCHAR(30), GETDATE(), 120) + '</timestamp>
        <processing_procedure>spProcessStep1</processing_procedure>
    </Message>
';
-- Begin a dialog conversation
BEGIN DIALOG CONVERSATION @dlg
    FROM SERVICE [StoredProcedureService]
    TO SERVICE 'StoredProcedureService'
    ON CONTRACT [DEFAULT]
    WITH ENCRYPTION = OFF;
-- Send the XML message to the Service Broker queue using the conversation handle
SEND ON CONVERSATION @dlg (@message_body);
-- End the dialog conversation
END CONVERSATION @dlg;

但是我在 tbl_log 中没有得到任何信息,这表明激活过程没有被触发。

激活过程链接到队列

SELECT name, activation_procedure
FROM sys.service_queues
WHERE name = 'StoredProcedureQueue';

当我询问时

SELECT * FROM sys.transmission_queue
SELECT * FROM sys.conversation_endpoints

我什么也没看到,除了有时看到一些记录,有时看不到。我不确定这是否意味着我的消息正在得到处理,但我仍然没有在 tbl_log 中看到激活过程的结果

有一次这些给了我记录,第一个 ... Transmission_status:找不到目标服务名称 ... 和第二个 ... state_desc:DISCONNECTED_OUTBOUND ...

我是db_owner,所以权限应该不是问题

有人知道该怎么做吗? 顺便说一句,上面的代码主要也是由 Chat GPT 提供的

sql sql-server queue message messagebroker
1个回答
0
投票

当 SQL 队列无法在 SQL Server 中启动激活过程时,请通过验证数据库权限进行故障排除,Charter Spectrum Internet 确保激活过程存在并正确配置。检查 SQL Server 错误日志中是否有任何相关消息,并查看事件查看器日志中是否存在潜在问题。考虑重新启动 SQL Server 服务并监视任何重复出现的错误。如果问题仍然存在,请向数据库管理员或 SQL Server 支持资源寻求帮助。

© www.soinside.com 2019 - 2024. All rights reserved.