Azure中webjob实例的变量值范围

问题描述 投票:0回答:1

我有一个由Web作业监听的服务总线队列。由于我们希望更快地处理请求,因此我们增加了Web作业实例(例如3)。但是当处理中出现任何错误时,我们不希望从队列中选择其他消息。为实现这一目标,我们将变量设置为0.我怀疑的是,此变量的值是否将在所有实例中为0,或者该值是否特定于实例。

代码就像这样......

int webJobStatus = 1;

while(webJobStatus == 1)
{
    try
    { 
       //processing....
    }
    catch(Exception ex)
    {
       webJobStatus = 1; // in case of exception, value is set as 0.
    } 
}
c# azure-webjobs
1个回答
0
投票

是的,WebJob的每个实例都有自己的实例,因此它有自己的webJobStatus值。这意味着在特定实例中设置webJobStatus只会停止该特定实例的处理,而不会停止其他实例的处理。

可能解决方案 让所有实例都响应这样一个值的一个可能的解决方案是在数据库,Azure存储或类似的东西中研究类似semaphore的东西。这样您就可以集中控制WebJob流的值。 请记住,这将导致性能下降。

我的两分钱 发生异常时,不要完全停止处理消息。由于您正在为云构建,因此会发生异常。资源可能(非常)暂时不可用,消息可能包含不正确的数据,所有这些都可能导致问题。考虑添加遥测和记录到您的webjob(Application Insights),以帮助快速查找和修复问题。通过启用死信队列,当处理消息失败多次(默认值:10)时,它将被置于死信队列中。使用它作为修复任何问题和重新处理失败消息的基础。 另见:Poison message handlingOverview of Service Bus dead-letter queues

顺便说说 我猜测catch块中的赋值应该是webJobStatus = 0;

© www.soinside.com 2019 - 2024. All rights reserved.