【发布时间】:2017-03-30 08:50:23
【问题描述】:
我正在设置一个示例,其中我有一个带有 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();
});
};
【问题讨论】:
-
另外,我的事件中心有 2 个分区。我想知道这是否可能相关,但我在docs.microsoft.com/en-us/azure/azure-functions/… 中没有看到任何与分区相关的配置,所以我没有看到精确的关系。
-
功能应用程序“始终开启”是否会改变一些事情?当功能应用程序处于消费计划中时,响应性存在一些已知限制(即:触发 BlobTrigger 的延迟等)。也许我们在这里看到了类似的行为?
-
您如何衡量执行次数?日志?监控标签?
-
目前,我主要是在我的工作站上使用 CLI 工具运行这项工作。我让它登录触发器(我知道激进的日志记录在生产中不好),这就是基础。 pastebin.com/e3rfgiTq 提供了一个示例会话(当然,有些匿名)
-
@Michael,您是否有机会不使用 $Default 作为 2 个函数中的 1 个的消费者组?有一个正在为非默认消费者组积极修复的错误。如果您还没有这样做,请至少让其中一个函数使用 $Default 消费者组,或者在您的 function.json 文件中省略“consumerGroup”条目。任何一种方法都会导致系统使用默认的消费者组,这应该会按预期触发。
标签: azure azure-functions azure-eventhub