将Azure功能与Azure事件中心集成时,事件已丢失

时间:2017-03-27 21:01:15

标签: azure azure-functions azure-eventhub

我正在设置一个示例,其中我有一个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();
    });
};

1 个答案:

答案 0 :(得分:1)

根据@ Michael的上述“评论”部分的回复,该问题与支持非默认消费者群体的错误有关。

<强>背景 功能应用程序实例是功能应用程序内所有功能的流程实例。要执行Function,必须至少运行1个Function App实例。

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

  1. 通过Azure门户访问功能应用程序 - UX工作流代表用户加载功能应用程序,有效地强制功能应用程序活跃起来。
  2. 功能应用实例由内部服务启动 - 有一个内部服务充当所有触发器上事件的代理侦听器。它负责监听新事件,如果存在非活动实例则启动Function App实例,并在必要时扩展新实例。
  3. 对于在消费计划下创建的函数,Function App实例将保持活动状态5分钟。 5分钟后,Function App实例将空闲。一旦“最后一个”功能应用程序实例空闲,如果场景#1 未发生,则该功能将仅由场景#2 触发。

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

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