跨不同数据库运行的 SQL Server Service Broker

问题描述

我正在 sql 服务器 Service broker 框架上进行 POC。设置是同一服务器上的多个数据库我有一个数据库,该数据库设置为包含“核心代码”。我已经修改一个名为 send_broker_message 的过程,它通常采用 FromService/ToService/Contract/MessageType/MessageBody 并发送它。这工作正常 - 有点......它只更新包含核心代码数据库上的 que 。我所追求的是更新另一个数据库上的 que。所有消息、查询、合同和消息类型在所有数据库中都是相同的。

服务代理代码示例没有专门引用任何特定的数据库实例。理想情况下,我会创建一个合同或服务来引用不同的数据库实例。

我能看到的唯一解决方案是在每个数据库上都有通用代码,并为每个我不愿意做的数据库调用单独的 send_broker_message(违背了核心代码库的概念)。

我的问题 - 是否可以将服务代理消息从一个数据库发送到另一个数据库,同时 SEND ON CONVERSATION 在第三个数据库上执行?如果是这样 - 代码会是什么样子?

重申一下 - 不打算跨服务器执行此操作(目前) - 所有数据库都在同一台服务器上。

更新:我已经让服务代理框架正常工作了。上述问题的答案是 - 不可能在另一个数据库上发送保护。

来自微软文档 FROM SERVICE 启动器_service_name 指定启动对话的服务。 指定的名称必须是当前数据库中的服务名称。为发起方服务指定的队列接收目标服务返回的消息和 Service broker 为此对话创建的消息。

所以“CodeRepository”数据库必须是发起者。不是 100% 理想,但我可以解决这个问题。

一个问题是在另一个数据库上更新队列。以下能够给出抛出的错误

SELECT * FROM [MyInitiatorDatabase].sys.transmission_queue

错误是;

An exception occurred while enqueueing a message in the target queue. Error: 916,State: 3.The server principal "sa" is not able to access the database "MyDatabase" under the current security context

原来我需要做的是SET TRUSTWORTHY ON例如

ALTER DATABASE [MyDatabase] SET TRUSTWORTHY ON

以下帮助很大SQL Service Broker - The server principal "sa" is not able to access

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)