我正在设置一个示例,其中我有一个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();
});
};
答案 0 :(得分:1)
根据@ Michael的上述“评论”部分的回复,该问题与支持非默认消费者群体的错误有关。
<强>背景强> 功能应用程序实例是功能应用程序内所有功能的流程实例。要执行Function,必须至少运行1个Function App实例。
通常,由于以下情况之一而启动了Function App实例:
对于在消费计划下创建的函数,Function App实例将保持活动状态5分钟。 5分钟后,Function App实例将空闲。一旦“最后一个”功能应用程序实例空闲,如果场景#1 未发生,则该功能将仅由场景#2 触发。
<强>问题强>
对于EventHub触发器,内部服务当前仅侦听默认使用者组上的事件。它不会检测何时有新事件到达其他消费者组并且不会唤醒功能应用程序。
这是一个已知问题,正在积极修复。您可以在以下位置跟踪问题 https://github.com/Azure/Azure-Functions/issues/230