【发布时间】:2022-01-23 21:37:41
【问题描述】:
我有一个带有队列触发器的 Java 11 Azure 函数,该函数在部署到 Azure 时按预期工作,并正确地从定义的服务总线主题中提取消息。但是,除非我回滚Azure Functions binding extensions 的版本,否则本地 运行相同的函数不起作用。如果我不恢复版本,该函数会在本地启动,但不会从服务总线主题中提取消息。
变量是项目中定义扩展包版本的host.json 文件。对于部署到 Azure 的函数,使用了为最新版本的扩展包配置的以下 host.json 文件:
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[3.3.0, 4.0.0)"
}
}
在本地工作的版本是这样的:
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[2.*, 3.0.0)"
}
}
Azure 函数本身并没有做任何特别的事情。在函数中设置断点时,如果我不将 Extension Bundle 版本恢复为 2/3 版本,则永远不会调用它。
public class QueueTrigger {
private DatabaseProvider database;
@FunctionName(Constants.FunctionNames.RUN_CHANGE_HISTORY_TRIGGER)
public void run(
@ServiceBusTopicTrigger(name = "msg",
topicName = "%SERVICE_BUS_TOPIC_NAME%",
subscriptionName = "%SERVICE_BUS_SUBSCRIPTION_NAME%",
connection = "ServiceBusConnection") String message,
final ExecutionContext context) {
Logger logger = context.getLogger();
try {
logger.log(Level.INFO, String.format("Queue Trigger START (%s)", message));
database = new CosmosDatabaseProvider(logger);
ChangeHistoryService service = new ChangeHistoryService(database, logger);
service.processChanges(message);
this.database.close();
logger.log(Level.INFO, "Queue Trigger DONE");
} catch (Exception ex) {
logger.log(Level.SEVERE, ex.getMessage());
throw new ServiceResponseException(ex.getMessage(), ex);
}
}
}
我的电脑上安装了Azure Function Core Tools v4.0.3971(最新版本),我的其他团队成员也有同样的问题。
我在本地环境中缺少什么导致最新版本的扩展包无法工作?
【问题讨论】:
标签: java azure azure-functions