用于监听任何服务总线的 azure 函数 topic/subscription

azure function to listen to any service bus topic/subscription

使用模板创建一个 azure 函数,可以创建只监听特定一对 azure 的函数 topic/subscription:

{
  "bindings": [
    {
      "name": "mySbMsg",
      "type": "serviceBusTrigger",
      "direction": "in",
      "topicName": "ftopic1",
      "subscriptionName": "mysub",
      "connection": "collosysazfuncsb_RootManageSharedAccessKey_SERVICEBUS",
      "accessRights": "Manage"
    }
  ],
  "disabled": false
}

然后在 run.csx 您刚刚收到消息

public static void Run(string message, TraceWriter log)
{
    log.Info($"message: {message}");
}

有没有办法使用 azure 函数收听任何 topic/subscription,然后在 Run 方法中接收 topicName 和 subscriptionName 作为参数。

将 topic-name 作为 * 没有帮助,而且它在 Run 中不提供 topic-name。

Azure Functions 仅允许侦听单个队列或订阅。它不允许侦听多个实体(队列或订阅),因为 Azure 服务总线客户端不支持此功能。相反,它是 Azure 服务总线的 , you could leverage Auto Forwarding feature。代理会将所有消息转发到目的地 topic/queue,您将有一个队列供 Azure Functions 使用。

请务必注意,自动转发的邮件不会携带任何可以识别 queue/subscription 来源的信息。只有 dead-lettered messages.

才有可能

由于您对主题感兴趣,您可以 "workaround" 通过对您的订阅规则采取行动来解决这个问题,该规则将使用自定义 属性 标记消息。例如,有 3 个主题,每个主题都有默认订阅,默认过滤器有规则操作

set [x-source] = 'topic-N'

其中 N 是一个主题标识符,会导致所有自动转发的消息包含 x-source 自定义 属性,其值对应于它们源自的主题。