.NET Core 2.0下Azure Functions无法接收队列消息求助
我之前升级Azure Functions到.NET Core 2.0时也碰到过类似的坑,给你梳理几个关键的排查和解决步骤,应该能搞定你的问题:
一、先搞清楚Trigger类型和连接字符串的匹配关系
你现在的核心错误是系统把Service Bus的连接字符串当成了存储账户的连接来验证,这大概率是Trigger类型和连接字符串不匹配导致的,先明确你用的是哪种队列:
如果是Azure存储队列(Storage Queue)
- 保持代码里的
[QueueTrigger("Translator")]不变,但要确保Connection参数指向存储账户的连接字符串(格式是DefaultEndpointsProtocol=https;AccountName=xxx;AccountKey=xxx;EndpointSuffix=core.windows.net) - 在
local.settings.json里配置对应的连接字符串:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "你的存储账户连接字符串(Host运行必需)", "TranslatorQueueConn": "你的存储账户连接字符串" } } - 然后修改Trigger的参数:
[QueueTrigger("Translator", Connection = "TranslatorQueueConn")]string mySbMsg
如果是Azure服务总线队列(Service Bus Queue)
- 把代码里的
[QueueTrigger]改成[ServiceBusTrigger](需要先安装对应扩展包) - 在
local.settings.json里配置Service Bus的连接字符串(格式是Endpoint=sb://xxx.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=xxx):{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "你的存储账户连接字符串(Host运行必需)", "ServiceBusConn": "你的Service Bus连接字符串" } } - 修改Trigger的参数:
[ServiceBusTrigger("Translator", Connection = "ServiceBusConn")]string mySbMsg
二、检查.NET Core 2.0对应的扩展包版本
升级到.NET Core 2.0后,必须确保Functions扩展包的版本和Runtime v2兼容(因为.NET Core 2.0对应Functions Runtime v2):
- 存储队列场景:安装
Microsoft.Azure.WebJobs.Extensions.Storage的v2.x版本(比如2.0.0或更高) - 服务总线队列场景:安装
Microsoft.Azure.WebJobs.Extensions.ServiceBus的v2.x版本 - 同时确保
local.settings.json里指定了正确的Runtime版本:"FUNCTIONS_EXTENSION_VERSION": "~2"
三、修复Http扩展加载失败的问题
Http扩展加载失败会影响整个Functions Host的稳定性,进而导致Trigger无法正常工作,你可以这么解决:
- 删除项目下的
bin和obj文件夹,清理后重新编译项目 - 检查
csproj文件,确保引用了Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator包,这个包负责扩展的元数据生成 - 如果是本地运行,确认Azure Functions Core Tools是v2版本(用
func --version查看),版本不对的话重新安装v2版本的工具
四、本地调试的额外检查点
- 确保
local.settings.json里的AzureWebJobsStorage配置有效,哪怕你不用存储队列,这个也是Functions Host运行的必需项(可以用Azurite本地存储模拟器代替线上存储) - 本地运行时仔细看控制台日志,确认队列是否存在、连接字符串的权限是否足够(比如Service Bus的密钥要有
Listen权限) - 如果是Service Bus队列,要先在Service Bus实例里手动创建好
Translator队列
按照上面的步骤一步步排查,应该能解决队列消息不触发和连接字符串验证失败的问题。
内容的提问来源于stack exchange,提问作者kemakino
相关产品推荐
相关产品推荐

