服务总线触发器使用变量值作为主题和订阅未触发

Service Bus Trigger using variable values for topic and subscription not firing

我有一个相对简单的 Azure 函数,它根据主题和订阅名称从服务总线中提取消息 - 这在本地调试时非常有效,但一旦部署,该函数就不会触发。没有错误,消息继续原封不动地留在服务总线上。

该函数本身只是将消息从主题中提取出来,对其进行反序列化并将生成的对象传递给将 add/update CosmosDB 项目的服务。

[FunctionName("PullFromServiceBus")]
public async Task Run([ServiceBusTrigger("%TopicName%", "%SubscriptionName%", Connection = "AzureWebJobsServiceBus")] string message)
{
    _logger.LogInformation($"C# ServiceBus topic trigger function processed message: {message}");

    var obj = JsonConvert.DeserializeObject<MyClass>(message);
    await AddOrUpdate(obj);
}

在 Azure 门户的应用程序设置中,我有名为“TopicName”和“SubscriptionName”的设置,其中包含我需要的值。

我看到 证实我的方法应该是正确的,但我无法弄清楚为什么该功能没有触发。谁能告诉我为什么?

而不是 "%TopicName%" 只是尝试发送“TopicName”,这是应用程序设置中的实际主题名称。

可能是触发器正在寻找名称为 %TopicName% 的主题,而不是应用程序设置中的主题。

关于如何在功能中使用应用程序设置,您可以参考以下article

希望这对遇到同样问题的其他人有所帮助。我认为这是一个部署问题,因为这是由函数应用程序的 bin 文件夹中的 extensions.json 文件中缺少一行引起的。

将以下行添加到 extensions.json 后,触发器开始工作,无需任何进一步更改。

{ "name": "ServiceBus", "typeName":"Microsoft.Azure.WebJobs.ServiceBus.ServiceBusWebJobsStartup, Microsoft.Azure.WebJobs.Extensions.ServiceBus, Version=5.5.0.0, Culture=neutral, PublicKeyToken=92742159e12e44c8"}