【发布时间】:2018-06-15 09:51:10
【问题描述】:
@azuresupport #azTechHelp 我有一个带有 Azure Function 订阅者的事件网格主题,该订阅者具有 CosmosDB 输出绑定。这是函数
export default async (context, eventGridEvent) => {
try {
context.log(`Saving Asset`);
context.log(`subject : ${eventGridEvent.subject}`)
context.log(`eventType : ${eventGridEvent.eventType}`)
var importObject = eventGridEvent.data;
if(!importObject.asset.id)
{
throw new Error("Supplied Asset does not have an ID specified, aborting!");
}
else
{
context.log(`Successfully exported asset(${eventGridEvent.data.objectId}) to Cosmos`);
context.bindings.outputDocument = importObject.asset;
}
}
catch (err) {
context.log.error(err);
context.log.error(`Error Processing Event Grid Object : ${eventGridEvent}`);
throw(err);
}
};
此函数中的逻辑(通常)永远不会失败,但是 Cosmos DB 绑定可能会失败(并且由于吞吐量限制而失败)。所以函数失败了,但没关系,我们的事件网格会重试,对吧?错了!
Image : Azure Function Failures
问题在于事件网格没有记录失败,而反过来从不重试该事件。
现在我们可以编写函数来在函数内部执行 Cosmos CRUD 并强制出错,或者可以创建我们自己的绑定,但我们希望坚持使用内置的 Cosmos 绑定。
Azure 中的人可以看看吗?
【问题讨论】:
-
上述代码中需要添加context.done吗? docs.microsoft.com/en-us/azure/azure-functions/…
标签: azure-eventgrid