将 Azure Functions 与 Azure 事件中心集成时丢失的事件

Events dropped when integrating Azure Functions with Azure Event Hubs

我正在设置一个示例,其中我有一个带有 webhook 的 Azure 函数,该 webhook 将 Azure 事件中心作为接收器。此事件中心有两个不同的使用者组,其中一个由另一个 Azure 函数使用。该代码没有做任何太花哨的事情(摘录如下),但我观察到一个奇怪的模式。每发布两条消息,只出现一条触发该功能一次。

发布网络挂钩:

module.exports = function (context, req) {
    var statusCode = 400;
    var responseBody = "Invalid request object";

    if (typeof req.body != 'undefined' && typeof req.body == 'object') {
        var eventInformation = req.body;

        context.log("Received event: " + eventInformation);

        context.bindings.outEvent = eventInformation;

        statusCode = 200;
        responseBody = "Event received.";
    }

    context.res = {
        status: statusCode,
        body: responseBody
    };

    context.done();
};

接收函数:

module.exports = function (context, offerMadeEvent) {
    var connection = new Connection(dbConfig); // Tedious connection
    connection.on('connect', function(err) {
        context.log('Connection established.');
        // Somewhere in the database callbacks:
        context.done();
    });
};

根据@Michael 在上面 "Comment" 部分的回复,该问题与支持非默认消费者组的错误有关。

背景
Function App实例是Function App内部所有Functions的流程实例。要执行一个 Function,至少 1 个 Function App 实例必须是 运行。

通常,Function App 实例会由于以下情况之一而启动:

  1. 正在通过 Azure 门户访问 Function App - UX 工作流代表用户加载 Function App,有效地强制 Function App 活跃起来。
  2. Function App 实例由内部服务启动 - 有一个内部服务充当所有触发器事件的代理侦听器。它负责侦听新事件,如果不存在活动实例则启动 Function App 实例,并在必要时扩展新实例。

对于在消费计划下创建的函数,Function App 实例将存活 5 分钟。 5 分钟后,Function App 实例将闲置。一旦 "last" Function App 实例闲置,如果 Scenario #1 没有发生,那么 Function 只会被 Scenario #2[=34 触发=].

问题
对于 EventHub 触发器,内部服务当前仅侦听默认使用者组上的事件。它不会检测何时有新事件到达其他消费组,不会唤醒功能应用。

这是一个已知问题,正在积极修复中。您可以在以下位置跟踪问题 https://github.com/Azure/Azure-Functions/issues/230