EventData-Objekt mit Eigenschaften mithilfe der Azure-Funktion [EventHubOutput] zurückgebenC#

Ein Treffpunkt für C#-Programmierer
Guest
 EventData-Objekt mit Eigenschaften mithilfe der Azure-Funktion [EventHubOutput] zurückgeben

Post by Guest »

Ich möchte in IFunctionsWorkerMiddleware eine Korrelations-ID festlegen für die Ausgabe eines Azure-Funktionstriggers, der EventHubOutput verwendet. Ich kann anscheinend keinen Weg finden, auf die Ereignisdaten zuzugreifen, die zurückgesendet werden, wenn ich EventHubOutput verwende.
Ich habe versucht, das InvocationResult zu manipulieren, aber Das heißt, welches Objekt auch immer vom Trigger zurückgegeben wurde (kein Zugriff auf Metadaten).
Ich habe auch versucht, ein EventData-Objekt vom Trigger zurückzugeben (gleicher Typ, der als Eingabe von EventHubTrigger verwendet wird), aber das wird einfach in einen String serialisiert „Azure.Messaging.EventHubs.EventData“ zum EH-Thema und nicht zum eigentlichen EventData-Objekt
Irgendeine Idee, wie man Header/Eigenschaften in EventHubOutput-Bindungen festlegt Funktions-Middleware?
InvocationResult verwenden

Code: Select all

[Function("MyFunction")]
[EventHubOutput("output", Connection = "output-connection")]
public async Task Run([HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequest req)
{
return "my payload";
}

Code: Select all

public class CorrelationMiddleware : IFunctionsWorkerMiddleware
{
public async Task Invoke(FunctionContext context, FunctionExecutionDelegate next)
{
await next(context);

SetOutputCorrelation(context);
}

private void SetOutputCorrelation(FunctionContext context)
{
var correlationId = Guid.NewGuid().ToString();

var result = context.GetInvocationResult();

// result is just the string returned from trigger - no access to metadata
}
}
Ereignisdaten zurückgeben

Code: Select all

[Function("MyFunction")]
[EventHubOutput("output", Connection = "output-connection")]
public async Task Run([HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequest req)
{
var payload = "my payload";

var eventData = new EventData(Encoding.UTF8.GetBytes(payload));

// if return type is EventData, it doesnt get properly serialized on the EventHub topic, it's just a .ToString() so it ends up as a message with payload as string "Azure.Messaging.EventHubs.EventData"
return eventData;
}

Code: Select all

public class CorrelationMiddleware : IFunctionsWorkerMiddleware
{
public async Task Invoke(FunctionContext context, FunctionExecutionDelegate next)
{
await next(context);

SetOutputCorrelation(context);
}

private void SetOutputCorrelation(FunctionContext context)
{
var correlationId = Guid.NewGuid().ToString();

var result = context.GetInvocationResult();

if (result.Value is EventData eventData)
{
eventData.Properties["correlation-id"] = correlationId;
}
}
}
UPDATE hat Program.cs hinzugefügt, wie von Ikhtesam Afrin angefordert

Code: Select all

var builder = FunctionsApplication.CreateBuilder(args);

builder.ConfigureFunctionsWebApplication();

builder.UseMiddleware();

builder.Services
.AddApplicationInsightsTelemetryWorkerService()
.ConfigureFunctionsApplicationInsights();

builder.Build().Run();
UPDATE
Ich glaube, der Kern dieses Problems liegt darin, dass [EventHubOutput] dazu nicht in der Lage ist Gibt ein EventData-Objekt zurück. Bei der Rückgabe eines EventData-Objekts scheint es so, als ob es lediglich durch Ausführen von .ToString() auf den EventHub gestellt würde, da die Nutzlast der Nachricht Azure.Messaging.EventHubs.EventData ist.< /p>
Image

Code: Select all

[Function("Function1")]
[EventHubOutput("output", Connection = "output-connection")]
public EventData Run([HttpTrigger(AuthorizationLevel.Anonymous, "get")] HttpRequest req)
{
var data = new EventData("test payload")
{
Properties =
{
{ "CorrleationId", "123" }
}
};

var str = data.ToString(); // -> "Azure.Messaging.EventHubs.EventData"

return data;
}
Ich bin auf diesen Beitrag gestoßen, der darauf hinweist, dass dies irgendwie möglich sein sollte. EventHubTrigger EventData[]-Bindung funktioniert nicht

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post