0

目前,我在 Azure 函数应用中面临两个问题。我提供了以下详细信息:

1. 全局变量内容在执行之间共享:我使用了 Concurrent 字典,它是一个全局变量,私有的和静态的。此变量正在队列触发器中使用。

private static readonly ConcurrentDictionary<string, string> s_mapping = new ConcurrentDictionary<string, string>()

不时地,我看到上面的变量在不同的队列触发器执行中共享。我该如何纠正它,以便变量不会在不同的运行实例之间共享?

2.通过Visual Studio发布后运行的旧代码:我使用Visual Studio发布代码,间歇性地看到旧代码正在运行。在配置中,WEBSITE_RUN_FROM_PACKAGE 设置为 1,并且我将其部署为 VS 中的 zip 文件。我尝试重新启动函数应用程序,但它似乎不起作用。

非常感谢这里的帮助或任何关于如何解决这些问题的指导。

4

1 回答 1

1

每个函数应用都在其自己的进程中运行,并且所有函数都在该进程中运行。静态变量在该应用程序中的所有函数之间共享,就像您编写了 ASP.NET 或控制台应用程序一样。例如,您可以在静态类中创建一个 HttpClient,并且所有函数都可以访问同一个客户端实例(事实上,我们鼓励这样做)。一直都是这样,所以那里没有任何改变。

来源:https ://github.com/Azure/Azure-Functions/issues/1202

1-) 不要使用静态变量或拆分成不同的天蓝色函数应用程序。

2-) 在发布新代码之前尝试从 wwwroot 中删除文件。这不应该发生,但是在高工作负载的情况下是可能的(在您发布新代码时正在处理代码)。我相信您能做的最好的事情就是在推动更改之前正确设置清洁步骤。

于 2021-08-02T13:41:52.360 回答