从 SQL 向 Azure ServiceBus 发送消息

Send message to Azure ServiceBus from SQL

我想通过存储过程将消息从 SQL 服务器发送到 Azure ServiceBus。 我遇到过几种解决方案,这些解决方案要求我安装来自其他供应商的软件,但我不想这样做。

目前唯一的解决方案似乎是使用公共语言运行时集成,其中 .NET(框架)代码作为存储过程运行。我不确定这是不是要走的路。

我认为你有以下选择:

  1. 使用CLR调用ServiceBusClient
  2. 将消息写入使用简单 table 或 SQL Service Broker 实现的队列,并使用另一个 C# 应用程序从队列中读取(如评论中所建议)
  3. 手动构建请求(参见Send Message) and send it using a POST request from Powershell using Invoke-WebRequest or Invoke-RestMethod, executed with xp_cmdshell
  4. 手动构建请求并使用带有 WinHttpRequest 和 sp_OACreate 和 sp_OAMethod 的 POST 请求发送它(就像 10-15 年前所做的那样)

另外,想一想为什么要为此使用存储过程。谁在调用存储过程?如果它是一个触发器,那么同步执行 POST 请求不是一个好主意(但是使用队列,尤其是使用 Service Broker,可能是 acceptable)。如果是别的客户端应用,能不能改成直接调用Service Bus?

你可以考虑以下方法:

方法一

  1. 在包含事件行的 Azure SQL 中定义 table
  2. 使用逻辑应用程序的 SQL 连接器,您可以对 table 的插入操作。Reference
  3. 使用逻辑应用程序的Azure 服务总线连接器,您可以将消息发送到Azure 服务总线。 Reference

方法二

  1. 编写一个调用 Azure 服务总线 REST 的 CLR 存储过程API。 Whosebug post
  2. 中详细介绍了这些步骤

希望以下步骤将帮助您创建 CLR 存储过程以通过 REST 进行 Azure 服务总线调用 API。

  1. 编写 .NET 代码制作 CLR 存储过程
  2. 编译代码使其成为程序集
  3. 在SQL服务器
  4. 中注册程序集
  5. 创建 CLR 存储过程
  6. 使用 CLR 存储过程调用基于 REST 的 Web 服务

以上步骤在下面有详细说明linkAccessing REST based Web services using SQL CLR

如果您太害怕 CLR 集成(额外的步骤以及对 CLR 库的外部依赖),那么您可以轻松地从存储过程调用 powershell 脚本来简化事情。

https://hubsqldba.wordpress.com/2013/07/31/call-a-powershell-ps1-file-from-a-stored-procedure/