Header in EventHubOutput in Azure FunctionMiddleware C# festlegen
Posted: 03 Jan 2025, 16:35
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, aber das ist nur in eine Zeichenfolge „Azure.Messaging“ serialisiert. EventHubs.EventData" on das EH-Thema und nicht das eigentliche EventData-Objekt
Irgendwelche Ideen, wie man Header/Eigenschaften in EventHubOutput-Bindungen in Function Middleware festlegt?
InvocationResult verwenden
Ereignisdaten zurückgeben
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, aber das ist nur in eine Zeichenfolge „Azure.Messaging“ serialisiert. EventHubs.EventData" on das EH-Thema und nicht das eigentliche EventData-Objekt
Irgendwelche Ideen, wie man Header/Eigenschaften in EventHubOutput-Bindungen in Function Middleware festlegt?
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
}
}
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));
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;
}
}
}