Azure Web 作业单例功能已锁定

Posted

技术标签:

【中文标题】Azure Web 作业单例功能已锁定【英文标题】:Azure web job singleton function is locked 【发布时间】:2016-07-26 17:56:42 【问题描述】:

我正在使用 Azure Web 作业连续运行一些逻辑。该函数是一个单例函数。但是,在重新启动 Web 应用程序后尝试运行此功能后,我收到“等待锁定”消息。这是否意味着同一函数的另一个实例正在保留锁?我该如何解决这个问题?

功能:

namespace Ns 


    public class Functions
    
        [Singleton]
        [NoAutomaticTriggerAttribute]
        public static async Task ProcessMethod()
        
           while(true)
           //process logic here
           await Task.Delay(TimeSpan.FromSeconds(20));
        

    

主程序:

namespace ns
   
    class Program
          
        static void Main()
                       
            var host = new JobHost();
            host.RunAndBlock();             
        
    

我收到的消息:

【问题讨论】:

【参考方案1】:

根据Singleton attribute description,Blob 租约在函数执行期间需要锁。

如果另一个函数实例在此函数执行时被触发 运行它会等待锁,定期轮询它。

如果您有多个应用服务计划实例,这意味着存在多个 Web 作业,因此仪表板可能会在一个运行时显示其他 Web 作业的锁定状态。

您可以在您的存储帐户上创建view the blob lease locks。

另一种选择是尝试Listener Singletons,但我从未尝试过手动触发器。

【讨论】:

是否可以停止同一个 Web 作业的所有实例?此外,当我部署 Web 应用程序时,是否会自动部署随附的 Web 作业?谢谢! 另外,即使我可以查看它,我如何获得正确功能的锁定?谢谢! “正确”功能是什么意思?锁和 Singleton 的设计使函数的一个实例正在运行,同一函数的其他实例被锁定。它用于定义要限制缩放的函数。 Webjob 实例的数量等于您运行它的应用服务计划的实例数量。 如果 Web 应用程序和 Web 作业都存在于同一个存储库中并且您创建了 required configuration file,则会自动部署它们。【参考方案2】:

我在 Azure 中禁用了生产功能,并将 listenerlockPeriod 设置为 15 秒,如上所述。

这大大减少了锁定行为。

【讨论】:

以上是关于Azure Web 作业单例功能已锁定的主要内容,如果未能解决你的问题,请参考以下文章

Azure 数据库上的 Sqlite 已锁定

将站点部署到 Azure 时出现“OperationalError:数据库已锁定”

SQL Server作业失败 - 帐户被锁定

python作业:模拟登陆(第一周)

无法在 SQLite DB 上执行 UPDATE 语句:数据库已锁定 [重复]

检查分支被锁定的次数以及锁定 Azure DevOps Rest API 的可能原因