Azure函数eventhub批处理输出绑定

kknvjkwl  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(107)

我有一个NodeJS azure函数,它从EventHubA接收一批事件。它对单个事件进行一些处理,大约需要3秒,并向EventHubB发送一个新事件。
我想在批处理中的一个事件被处理后立即将数据发送到EventHubB;而不是等待整个批处理,然后立即发送所有事件输出。
我在EventHub输出绑定文档中尝试了示例,但这似乎是在函数结束时发送输出事件。
我希望它能在事件被推到列表中时立即将它们推到EventhubB。
有没有办法在输出事件被处理后立即发送它们,而不需要等待整个批处理完成?目的是减少输出事件的延迟。
这里是index.js

module.exports = async function (context, events) {
  context.bindings.outputEventHubEvent = [];
  for (let i = 0; i < events.length; i++) {
    let event = JSON.parse(events[i]);
    let output = await someFunctionWhichTakes5Seconds(event);
    context.bindings.outputEventHubEvent.push(output);
   }
  context.done();
};

function.json

{
"bindings": [
    {
        "type": "eventHubTrigger",
        "name": "eventhubA",
        "direction": "in",
        "eventHubName": "EventHubA",
        "connection": "ConnectionStringA",
        "cardinality": "many",
        "consumerGroup": "Sample",
        "dataType": "string",
        "maxBatchSize": 512
    },
    {
        "type": "eventHub",
        "name": "outputEventHubEvent",
        "eventHubName": "EventHubB",
        "connection": "ConnectionStringB",
        "direction": "out"
    }
]
}

我想在输出事件生成后立即将其发送到eventHub,而不是在整个批处理之后。

icnyk63a

icnyk63a1#

我能够使用此代码将处理后的消息逐个发送到第二个EventHub。
使用MS Doc作为参考。
我使用了默认的EventHub触发器示例代码,并根据代码中的要求进行了一些更改。

index.js

module.exports = async function (context, eventHubMessages) {
    context.log(`JavaScript eventhub trigger function called for message array ${eventHubMessages}`);

    context.bindings.outputEventHubMessage=[];
    
    eventHubMessages.forEach((message, index) => {
        context.log(`Processed message ${message}`);
        
        context.bindings.outputEventHubMessage = message;

        context.log(`send processed message ${message}`);
        
    });
};

function.json

{
  "bindings": [
    {
      "type": "eventHubTrigger",
      "name": "eventHubMessages",
      "direction": "in",
      "eventHubName": "batch",
      "connection": "ConnectionStringA",
      "cardinality": "many",
      "consumerGroup": "$Default",
      "dataType": "string"
    },
    {
      "type": "eventHub",
      "name": "outputEventHubMessage",
      "eventHubName": "batch2",
      "connection": "ConnectionStringB",
      "direction": "out"
  }
  ]
}

Output

相关问题