使用模板创建 azure 函数,可以创建仅监听特定一对 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 函数监听任何主题/订阅,然后在 Run
方法中接收 topicName 和 subscriptionName 作为参数。
将主题名称设置为 * 没有帮助,而且它也不在 Run
中提供主题名称。
最佳答案
Azure Functions 仅允许监听单个队列或订阅。它不允许监听多个实体(队列或订阅),因为 Azure 服务总线客户端不支持此功能。相反,因为它 was pointed out ,您可以利用 Auto Forwarding feature Azure 服务总线。代理会将所有消息转发到目标主题/队列,并且您将拥有一个供 Azure Function 提供的队列。
需要注意的是,自动转发的消息不会携带任何可以识别它们源自哪个队列/订阅的信息。这只能通过 dead-lettered messages 实现。 .
由于您对主题感兴趣,因此您可以通过对订阅规则执行操作来“解决”此问题,该操作将使用自定义属性标记消息。例如,有 3 个主题,每个主题都有默认订阅,还有一个带有规则操作的默认过滤器
设置[x-source] = 'topic-N'
其中 N
是主题标识符,将导致所有自动转发的消息包含 x-source
自定义属性,其值与其源自的主题相对应。
关于用于监听任何服务总线主题/订阅的azure函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48766882/