使用Azure函数从ServiceBus主题/订阅中读取时出错

时间:2018-12-20 14:42:29

标签: azure azure-functions servicebus azure-servicebus-topics

我目前正在开发azure函数(这是新功能),但是在尝试从主题/订阅中读取时出现以下错误。我不知道是什么原因造成的。任何帮助,将不胜感激。

[20/12/2018 14:22:22] Loaded custom extension: ServiceBusExtensionConfig from 'referenced by: Method='Function.ContentCacheUpdate.ReadNotificationQueue.Run', Parameter='mySbMsg'.'
[20/12/2018 14:22:22] Generating 1 job function(s)
[20/12/2018 14:22:23] Found the following functions:
[20/12/2018 14:22:23] Function.ContentCacheUpdate.ReadNotificationQueue.Run
[20/12/2018 14:22:23]
[20/12/2018 14:22:23] Host initialized (1208ms)
Listening on http://localhost:7071/
Hit CTRL-C to exit...
[20/12/2018 14:22:23] Host started (1682ms)
[20/12/2018 14:22:23] Job host started
[20/12/2018 14:22:23] Host lock lease acquired by instance ID '000000000000000000000000EB6A5850'.

我的功能看起来像这样

private const string TopicName = "testtopic";

[FunctionName("Function2")]
public static void Run([ServiceBusTrigger(TopicName, "SubscriptionName", Connection = "MyBindingConnection")]string mySbMsg, ILogger log)
{
    log.LogInformation($"C# ServiceBus topic trigger function processed message: {mySbMsg}");
}

,而我的local.settings.json文件是

{
 "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "AzureWebJobsDashboard": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "TopicName": "testtopic",
    "SubscriptionName": "testsubscription",
    "MyBindingConnection": "Endpoint=sb://test-.xxxxxxxxxxxxxxxxxxxx="
  }
}

谢谢

2 个答案:

答案 0 :(得分:1)

看起来VS使用的Azure Functions核心工具已过时。要解决此问题,

首先,转到VS菜单>“工具”>“扩展和更新”,找到Azure Functions and Web Jobs Tools,如果不是latest(现在为15.10.2046.0),请对其进行更新。关闭所有VS实例。等待更新完成(如果有)。

然后清理旧工具和模板,并使用VS下载新工具。

  1. 删除%localappdata%\AzureFunctionsTools%userprofile%\.templateengine文件夹。

  2. 重新打开VS以创建一个新的Function项目,请在创建对话框中等待,请参见Making sure all templates are up to date...

    enter image description here 一段时间后,我们可以看到笔尖的变化为

    enter image description here

  3. 单击“刷新”可立即使用最新模板。

创建新的v2 ServiceBus主题触发器后,如下更改代码。 Connection默认情况下在应用程序设置(local.setting.json)中查找值,而对于其他属性,我们需要用百分号将它们包装起来。在doc中查看详细信息。

    [FunctionName("MyServiceBusTrigger")]
    public static void Run([ServiceBusTrigger("%TopicName%", "%SubscriptionName%", Connection = "MyBindingConnection")]string mySbMsg, ILogger log)
    {
        log.LogInformation($"C# ServiceBus topic trigger function processed message: {mySbMsg}");
    }

local.settings.json

{
 "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "TopicName": "testtopic",
    "SubscriptionName": "testsubscription",
    "MyBindingConnection": "Endpoint=sb://test-.xxxxxxxxxxxxxxxxxxxx="
  }
}

答案 1 :(得分:0)

即使我使用这种方式,也可以交叉检查订阅中是否有消息。