【问题标题】:Azure Functions Extension Bundle Version Issue for Local Development本地开发的 Azure Functions Extension Bundle 版本问题
【发布时间】: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


    【解决方案1】:

    我尝试通过以下步骤重现该问题:

    1. 在 VS Code 中使用队列触发器示例创建 Azure Functions (Stack: Java)。
    2. host.json默认版本为3.*, 4.0.0,消息拉取成功。

    host.json 中降级到 azure 函数扩展包的 2.*, 3.0.0 版本后,消息成功退出。

    运行 azure 函数 (java) 时,运行时会自动获取 host.json 中提到的最新版本,并且运行时可以在输出终端中看到它正在运行的版本。

    【讨论】:

    • 感谢您对此进行研究。我遇到的问题是,在调试 Azure 函数的本地版本时,您的第 2 步对我不起作用,我不知道为什么。函数启动但从不使用“[3.3.0, 4.0.0)”版本提取配置的服务总线主题的消息。
    • 能否提供你的函数代码和host.json代码!
    • 完整的 host.json 已经在原帖中。我只是添加了功能代码,这在很大程度上无关紧要,因为在本地开发中使用host.json文件中的“[3.3.0, 4.0.0)”版本时甚至没有命中代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    • 2018-10-19
    • 2011-09-11
    • 1970-01-01
    • 2017-04-09
    • 1970-01-01
    相关资源
    最近更新 更多