我的 3 个
CosmosDBTrigger
上有 WebJobs
,它针对同一个容器。意思是,每当此容器上发生任何 Upsert
时,都应该触发这 3 个。我看到了三分之一的工作没有触发的问题,并试图理解原因。
出于调试目的,我手动禁用了这些作业,其中我遇到了
WebJob2
和 WebJob3
的断点。当我对 WebJob1
执行相同操作时,什么也不会发生。
这就是
CosmosDBTrigger
在工作中的定义方式。如果触发 2 个作业,那么逻辑对我来说似乎很好。此处,WebJob1
未触发。我在这里缺少什么?
WebJob1:
public async Task ProcessMessageAsync(
[CosmosDBTrigger(
"%Database:DatabaseName%",
"%Database:ContainerName%",
Connection = CosmosDbConnectionString,
CreateLeaseContainerIfNotExists = true,
LeaseContainerName = "leases",
LeaseContainerPrefix = nameof(WebJob1)
)]
string documents, CancellationToken cancellationToken)
{
// Logic
}
WebJob2:
public async Task ProcessMessageAsync(
[CosmosDBTrigger(
"%Database:DatabaseName%",
"%Database:ContainerName%",
Connection = CosmosDbConnectionString,
CreateLeaseContainerIfNotExists = true,
LeaseContainerName = "leases",
LeaseContainerPrefix = nameof(WebJob2)
)]
string documents, CancellationToken cancellationToken)
{
// Logic
}
WebJob3:
public async Task ProcessMessageAsync(
[CosmosDBTrigger(
"%Database:DatabaseName%",
"%Database:ContainerName%",
Connection = CosmosDbConnectionString,
CreateLeaseContainerIfNotExists = true,
LeaseContainerName = "leases",
LeaseContainerPrefix = nameof(WebJob3)
)]
string documents, CancellationToken cancellationToken)
{
// Logic
}
解决此问题的理论:这是由于手动添加或删除租赁容器中的条目,导致租赁容器损坏并导致作业指针未对齐。重新部署 Cosmos 的 ARM 模板解决了这个问题。