为什么 Azure 函数不写入服务总线主题

Why Azure function is not writing to Service Bus Topic

我的功能就像

    [FunctionName("MyFunctionName")]
    [return: ServiceBus("mytopic", Connection = "ServiceBusConnectionString")]
    public static async Task<string> MyFunctionAsync([QueueTrigger("my-input-queue")] string msgIn, TraceWriter log)
    {

我的local.settings.json

{
  "IsEncrypted": false,
  "Values": {
    "ServiceBusConnectionString": "[my connection string]"
  }
}

其中 [my connection string] 是根据 共享访问策略 之一从 主连接字符串 复制粘贴的 [= =24=]发送声明。

这只是无声地失败:消息卡在 my-input-queue 中,并且没有错误写入日志流。但是我 100% 确定这个属性是问题所在,因为我已经部署了 100 种不同的组合来尝试让它工作:)。

有什么想法吗?

您缺少 QueueTrigger 所需的设置,因此您的函数不会触发队列中的新项目。您应该具有 AzureWebJobsStorageAzureWebJobsDashboard 的值,并且您的 QueueTrigger 应该具有 Connection 字段的值。

有关如何在本地连接 QueueTriggers 和测试的更多信息,请参阅

根据我的测试,它应该与 servicebus 属性一起工作。以下是我的测试代码。

[return: ServiceBus("topicName",Connection = "ServiceBusConnectionString", EntityType = EntityType.Topic)]
public static async Task<string>Run([QueueTrigger("queueName")]string myQueueItem, TraceWriter log)
{
   ...
   return myQueueItem; // write to the Topic.
}

local.settings.json

{
 "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "xxxxxx",
    "AzureWebJobsDashboard": "xxxxxxxx",
    "ServiceBusConnectionString": "xxxxxx"
  }
}

您可以从此 tutorial 获得有关 Azure 服务总线输出绑定的更多信息。您也可以通过以下方式做到这一点

[FunctionName("ServiceBusOutput")]
public static void Run([[QueueTrigger("queueName")]string myQueueItem,
                       TraceWriter log,
                       [ServiceBus("topicName",Connection = "ServiceBusConnectionString", EntityType = EntityType.Topic)]out string queueMessage)
{
    log.Info("Azure Function Demo - Azure Service Bus Queue Topic");

    queueMessage = myQueueItem;
}