Próbuję utworzyć funkcję wyzwalacza EventHub azure z wieloma jako kardynalność dla przetwarzania wsadowego komunikatów o zdarzeniach.

Poniżej znajduje się kod w run.csx

#r "Microsoft.Azure.EventHubs"

using System.Text;
using System;
using Microsoft.ServiceBus.Messaging;
using Microsoft.Azure.EventHubs;

public static void Run(EventData[] eventMessage, ILogger logger)
{
    logger.LogInformation("Event: {Encoding.UTF8.GetString(eventMessage.Body)}");
    logger.LogInformation("EnqueuedTimeUtc={eventMessage.SystemProperties.EnqueuedTimeUtc}");
    logger.LogInformation("SequenceNumber={eventMessage.SystemProperties.SequenceNumber}");
    logger.LogInformation("Offset={eventMessage.SystemProperties.Offset}");

}

Wraz z konfiguracją środowiska uruchomieniowego host.json is

{
  "version": "2.0"
}

I plik konfiguracyjny funkcji function.json

{
  "bindings": [
    {
    "type": "eventHubTrigger",
    "name": "eventMessage",
    "direction": "in",
    "eventHubName": "myEventHub",
    "connection": "consumer_hub",
    "consumerGroup": "$Default",
    "cardinality": "many"
    }
  ]
}

Po pojawieniu się błędu kompilacji dotyczącego assemblacji brakuje

2018-11-27T09:36:54.325 [Error] run.csx(1,1): error CS0006: Metadata file 'Microsoft.Azure.EventHubs' could not be found
2018-11-27T09:36:54.389 [Error] run.csx(5,17): error CS0234: The type or namespace name 'ServiceBus' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?)
2018-11-27T09:36:54.425 [Error] run.csx(6,23): error CS0234: The type or namespace name 'EventHubs' does not exist in the namespace 'Microsoft.Azure' (are you missing an assembly reference?)
2018-11-27T09:36:54.522 [Error] run.csx(9,24): error CS0246: The type or namespace name 'EventData' could not be found (are you missing a using directive or an assembly reference?)

Czy możesz mi pomóc, dlaczego zależność nie jest dostępna w funkcji azure? Nawet dokumentacja platformy Azure ma odniesienie do tego. Oznacza to, że te zestawy powinny już być obecne w środowisku uruchomieniowym udostępnianym przez platformę Azure.

https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-event-hubs

0
Oomph Fortuity 27 listopad 2018, 12:38

1 odpowiedź

Najlepsza odpowiedź

Dokument jest w jakiś sposób niespójny, spróbuj kodu poniżej.

#r "../bin/Microsoft.Azure.EventHubs.dll"

using System.Text;
using System;
using Microsoft.Azure.EventHubs;

public static void Run(EventData[] eventMessage, ILogger logger)
{
    foreach (var message in eventMessage)
    {
        logger.LogInformation($"Event: {Encoding.UTF8.GetString(message.Body)}");
        logger.LogInformation($"EnqueuedTimeUtc={message.SystemProperties.EnqueuedTimeUtc}");
        logger.LogInformation($"SequenceNumber={message.SystemProperties.SequenceNumber}");
        logger.LogInformation($"Offset={message.SystemProperties.Offset}");
    }
}

Poza tym w function.json liczność jest dla funkcji js do odbierania zdarzeń w partii. Dla c# wystarczy EventData[].

3
Jerry Liu 27 listopad 2018, 13:45