【问题标题】:Send message to Azure ServiceBus from SQL从 SQL 向 Azure ServiceBus 发送消息
【发布时间】:2021-09-08 23:36:52
【问题描述】:

我想通过存储过程从 SQL Server 向 Azure ServiceBus 发送消息。 我遇到了几种解决方案,这些解决方案需要我安装其他供应商的软件,而我不想这样做。

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

【问题讨论】:

  • 能否使用 SQL Service Broker 引发事件并让 C# 应用程序接收消息并转发到 Azure?

标签: sql-server azureservicebus


【解决方案1】:

我认为您有以下选择:

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

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

【讨论】:

  • 是的。我们已经决定使用 Service Broker。但是如何从队列中获取消息以将它们发布到 ServiceBus 将是 CLR 或使用 C# 应用程序轮询。
【解决方案2】:

您可以想到以下方法:

方法 1

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

方法 2

  1. 编写调用 Azure 服务总线 REST API 的 CLR 存储过程。步骤在Stackoverflow post中有详细说明

【讨论】:

    【解决方案3】:

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

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

    以上步骤在以下链接Accessing REST based Web services using SQL CLR中有详细说明

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 2017-03-29
        • 2021-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-22
        • 1970-01-01
        • 1970-01-01
        • 2016-06-15
        相关资源
        最近更新 更多