1

一个奇怪的事情发生在我的一个 WebJobs 中,我找不到问题所在。

此 WebJob 配置为在特定服务总线队列上收到消息后立即使用 ServiceBusTrigger。这个函数的执行时间是分钟/小时,所以我这样配置了 JobHostConfiguration:

config.UseServiceBus(new ServiceBusConfiguration()
{
     MessageOptions = new Microsoft.ServiceBus.Messaging.OnMessageOptions()
     {
          MaxConcurrentCalls = 3,
          AutoRenewTimeout = new TimeSpan(4, 0, 0),
          AutoComplete = true                    
     }
});

如果我理解正确,这将授予每个功能:

  1. 每个实例最多并行执行 3 次(每条消息执行一次)
  2. 消息上的锁定最多保留 4 小时。如果处理时间少于 4 小时,这将避免消息重新排队。
  3. 一旦函数完成,消息就会从队列中删除(即使它应该是默认行为)。

这些消息包含必须为不同用户执行的作业。为了对不同的用户并行执行,但作为每个用户的单例,在函数内部我采取租约(与每个用户不同)并将其保留 60 秒,每 30 秒更新一次任务。

这似乎可行:为不同的客户并行执行作业,并对相同用户的相同请求进行序列化。

现在,有时 WebJob 会停止触发该功能,即使队列已满是消息。我不明白为什么。

一旦我重新启动该网络作业,一切都会像以前一样运行。关于为什么会发生这种情况的任何想法?

我注意到应用程序(错误地)停止了,即使网络作业正在运行。也许这就是问题所在?

4

0 回答 0