将Azure函数与Azure事件集线器集成时丢弃的事件

将Azure函数与Azure事件集线器集成时丢弃的事件,azure,azure-functions,azure-eventhub,Azure,Azure Functions,Azure Eventhub,我正在建立一个示例,其中我有一个带有webhook的Azure函数,其中有一个Azure事件中心作为接收器。此事件中心有两个不同的使用者组,其中一个由另一个Azure功能使用。代码没有做任何太花哨的事情(摘录如下),但我观察到一种奇怪的模式。对于每发布两条消息,只有一条消息会触发该函数一次 发布web挂钩: module.exports = function (context, req) { var statusCode = 400; var responseBody = "In

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

发布web挂钩:

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在上述“评论”部分的回复,该问题与非默认消费者群体支持中的一个缺陷有关

背景
函数应用程序实例是函数应用程序内所有函数的流程实例。要执行函数,必须至少运行一个函数应用程序实例

通常,由于以下情况之一而启动函数应用程序实例:

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

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

    这是一个已知问题,正在积极解决。您可以在以下位置跟踪此问题:

    此外,我的事件中心上有两个分区。我想知道这是否可能相关,但我在中没有看到任何与分区相关的配置,因此我没有看到精确的关系。功能应用程序“始终打开”是否会改变情况?当功能应用程序在消费计划中时,则存在一些已知的响应限制(例如:触发BlobTrigger的延迟等)。也许我们在这里看到了类似的行为?您如何衡量执行计数?日志?监视器选项卡?目前,我主要是在工作站上使用CLI工具运行作业。我把它记录在触发器上(我知道在生产中激进的日志记录是不好的),这一直是基础。@Michael提供了一个示例会话(当然有些匿名),您是否有可能不使用$Default作为2个函数中的消费者组?对于非默认消费者组,有一个bug正在被积极修复。如果您还没有这样做,请让至少一个函数使用$Default consumer组,或者在function.json文件中省略“consumerGroup”条目。任何一种方法都会导致系统使用默认的使用者组,该使用者组应按预期触发。