Azure功能未向事件网格

时间:2018-06-08 12:41:29

标签: azure-eventgrid

@azuresupport #azTechHelp我有一个具有Azure功能订阅者的事件网格主题,该订阅者具有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绑定可能会失败(并且由于吞吐量限制而失败)。所以函数失败了,但那样我们的Event Grid会重试,对吧?错!

Image : Azure Function Failures

问题在于,事件网格没有注册失败,反过来从不重试事件。

Image : EG Logs

现在我们可以编写函数来在函数内部执行Cosmos CRUD并强制执行错误,或者创建我们自己的绑定,但我们希望坚持使用内置的Cosmos绑定。

Azure中有人可以看看吗?

1 个答案:

答案 0 :(得分:0)

这很可能是因为一旦事件达到 Azure功能,就会认为它已成功传递,并且功能执行的结果对http响应没有贡献

这是一个众所周知的issue并在最新eventgrid extension release中修复,我会说你应该在一两周内完成,如果没有,请打开一个问题here