为什么Azure函数未写入Service Bus主题

时间:2018-07-12 16:16:17

标签: azure azure-functions azureservicebus azure-webjobs

我的功能就像

const stepperAnimationSubscription = this.stepper.animationDone.subscribe(_ => {
    element.scrollIntoView({
      behavior: 'smooth',
      block: 'start',
      inline: 'nearest',
    });
  });
  // stepperAnimationSubscription.unsubscribe(); => Code doesn't work

我的 local.settings.json

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

其中{ "IsEncrypted": false, "Values": { "ServiceBusConnectionString": "[my connection string]" } } 是根据共享访问策略之一中具有发送声明的主要连接字符串复制粘贴的

这只是默默地失败了:消息卡在[my connection string]中,并且没有错误写入日志流。但是我100%确信属性是问题所在,因为我已经部署了100种不同的组合来尝试使其起作用:)。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

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

有关如何连接QueueTriggers并在本地进行测试的更多信息,请参见this answer

答案 1 :(得分:0)

根据我的测试,它应该与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 Service Bus输出绑定的更多信息。您也可以通过以下方式做到这一点

[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;
}