Azure 尽管捕获了异常,但仍发生ScriptHost错误
我有一个简单的函数,它从队列中获取消息并将其保存到存储表中。我希望在某些情况下,具有相同数据的表实体可能已经存在。因此,我添加了一个异常处理来跳过这种情况,并将队列消息标记为已处理。尽管现在已经处理了异常,但scripthost会通知我一个错误,并且消息仍然在队列中 我想这是因为我使用的是主机和代码之间边缘的表绑定。我说得对吗?我应该在代码中使用表客户机而不是绑定吗?有不同的方法吗 生成此情况的示例代码:Azure 尽管捕获了异常,但仍发生ScriptHost错误,azure,azure-functions,Azure,Azure Functions,我有一个简单的函数,它从队列中获取消息并将其保存到存储表中。我希望在某些情况下,具有相同数据的表实体可能已经存在。因此,我添加了一个异常处理来跳过这种情况,并将队列消息标记为已处理。尽管现在已经处理了异常,但scripthost会通知我一个错误,并且消息仍然在队列中 我想这是因为我使用的是主机和代码之间边缘的表绑定。我说得对吗?我应该在代码中使用表客户机而不是绑定吗?有不同的方法吗 生成此情况的示例代码: [FunctionName("MyFunction")] public s
[FunctionName("MyFunction")]
public static async Task Run([QueueTrigger("myqueue", Connection = "Conn")]string msg, [Table("mytable", Connection = "Conn")] IAsyncCollector<DataEntity> dataEntity, TraceWriter log)
{
try
{
await dataEntity.AddAsync(new DataEntity()
{
PartitionKey = "1",
RowKey = "1",
Data = msg
});
await dataEntity.FlushAsync();
}
catch (StorageException e)
{
// when it is an exception that informs "entity already exists" skip it
}
}
[FunctionName(“MyFunction”)]
公共静态异步任务运行([QueueTrigger(“myqueue”,Connection=“Conn”)]string消息,[Table(“mytable”,Connection=“Conn”)]IAsyncCollector数据实体,TraceWriter日志)
{
尝试
{
等待dataEntity.AddAsync(新dataEntity()
{
PartitionKey=“1”,
RowKey=“1”,
数据=消息
});
等待dataEntity.FlushAsync();
}
捕获(存储异常)
{
//当异常通知“实体已存在”时,跳过它
}
}
当队列触发器函数失败时,Azure函数将对给定队列消息重试该函数最多五次,包括第一次尝试
如果所有五次尝试都失败,函数运行库将向名为-poison
的队列添加一条消息
您可以编写一个函数来处理来自的消息,方法是记录消息或发送需要手动注意的通知
该文件包含控制队列触发器行为的设置:
{
"queues": {
"maxPollingInterval": 2000,
"visibilityTimeout" : "00:00:30",
"batchSize": 16,
"maxDequeueCount": 1,
"newBatchThreshold": 8
}
}
注意:maxDequeueCount默认值为5。在将消息移动到毒药队列之前尝试处理消息的次数。根据需要,您可以设置“maxDequeueCount”:1
此外,这些设置在主机范围内,适用于所有功能。您目前无法控制每个函数的这些参数。谢谢您的回答。不幸的是,它不能解决我的问题。我知道队列触发器的行为(关于其重试策略、毒药队列等),我认为这不是重点。问题是我捕捉到了一个异常,尽管如此,我还是得到了scripthost错误。