将Azure函数与Azure事件集线器集成时丢弃的事件
我正在建立一个示例,其中我有一个带有webhook的Azure函数,其中有一个Azure事件中心作为接收器。此事件中心有两个不同的使用者组,其中一个由另一个Azure功能使用。代码没有做任何太花哨的事情(摘录如下),但我观察到一种奇怪的模式。对于每发布两条消息,只有一条消息会触发该函数一次 发布web挂钩:将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
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在上述“评论”部分的回复,该问题与非默认消费者群体支持中的一个缺陷有关 背景
函数应用程序实例是函数应用程序内所有函数的流程实例。要执行函数,必须至少运行一个函数应用程序实例 通常,由于以下情况之一而启动函数应用程序实例:
对于EventHub触发器,内部服务当前仅侦听默认使用者组上的事件。它不会检测到其他消费群体何时有新事件到来,也不会唤醒功能应用程序 这是一个已知问题,正在积极解决。您可以在以下位置跟踪此问题:
此外,我的事件中心上有两个分区。我想知道这是否可能相关,但我在中没有看到任何与分区相关的配置,因此我没有看到精确的关系。功能应用程序“始终打开”是否会改变情况?当功能应用程序在消费计划中时,则存在一些已知的响应限制(例如:触发BlobTrigger的延迟等)。也许我们在这里看到了类似的行为?您如何衡量执行计数?日志?监视器选项卡?目前,我主要是在工作站上使用CLI工具运行作业。我把它记录在触发器上(我知道在生产中激进的日志记录是不好的),这一直是基础。@Michael提供了一个示例会话(当然有些匿名),您是否有可能不使用$Default作为2个函数中的消费者组?对于非默认消费者组,有一个bug正在被积极修复。如果您还没有这样做,请让至少一个函数使用$Default consumer组,或者在function.json文件中省略“consumerGroup”条目。任何一种方法都会导致系统使用默认的使用者组,该使用者组应按预期触发。