azure函数用于监听任何服务总线主题/订阅

时间:2018-02-13 12:29:53

标签: azure azure-functions azureservicebus

使用模板创建azure函数,可以创建仅侦听特定天蓝色主题/订阅对的函数:

{
  "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函数收听任何主题/订阅,然后接收topicName& subscriptionName作为Run方法中的参数。

将topic-name作为*没有用,而且它也没有在Run中提供topic-name。

1 个答案:

答案 0 :(得分:3)

Azure Functions仅允许侦听单个队列或订阅。它不允许侦听多个实体(队列或订阅),因为Azure Service Bus客户端不支持此操作。相反,正如was pointed out一样,您可以利用{3}} Azure Service Bus。代理会将任何消息转发到目标主题/队列,并且您将拥有一个用于Azure功能的单个队列。

重要的是要注意,自动转发的消息不会携带任何可以识别它们来自哪个队列/订阅的信息。这仅适用于Auto Forwarding feature

由于您对主题感兴趣,因此您可以通过对订阅规则执行操作来解决此问题,该规则将使用自定义属性标记邮件。例如,有3个主题,每个主题都有默认订阅,默认过滤器有规则操作

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

其中N是主题标识符,会导致所有自动转发的邮件包含x-source自定义属性,其值与其源自的主题相对应。