azure-functions-kafka-extension
azure-functions-kafka-extension copied to clipboard
Serialization error for timestamp
Hello, i have azure function which is triggered by kafka message.
It's basic body looks like:
public class GeneratePdfFunction { [Function("GeneratePdfFunction")] public static void Run([KafkaTrigger("localhost:19092", "functions_requests", ConsumerGroup = "3")] Message<Ignore, GeneratePdfRequest> message, FunctionContext functionContext) { // here is some work to do but it is not needed here } }
GeneratePdfRequest is an empty class
After receiving a message from kafka it throws json serialization exception:
[2023-02-09T10:42:38.584Z] Executed 'Functions.GeneratePdfFunction' (Failed, Id=aab50acf-0589-4cc5-b8f5-108632f2255c, Duration=286ms) [2023-02-09T10:42:38.587Z] System.Private.CoreLib: Exception while executing function: Functions.GeneratePdfFunction. System.Private.CoreLib: Result: Failure Exception: Microsoft.Azure.Functions.Worker.FunctionInputConverterException: Error converting 1 input parameters for Function 'GeneratePdfFunction': Cannot convert input parameter 'message' to type 'Confluent.Kafka.Message2[[Confluent.Kafka.Ignore, Confluent.Kafka, Version=2.0.2.0, Culture=neutral, PublicKeyToken=12c514ca49093d1e],[Resident.Api.Functions.Contracts.PdfGenerator.GeneratePdfRequest, Resident.Api.Functions.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' from type 'System.String'. Error:System.Text.Json.JsonException: The JSON value could not be converted to Confluent.Kafka.Timestamp. Path: $.Timestamp | LineNumber: 0 | BytePositionInLine: 93.
[2023-02-09T10:42:38.589Z] at System.Text.Json.ThrowHelper.ThrowJsonException_DeserializeUnableToConvertValue(Type propertyType)
[2023-02-09T10:42:38.590Z] at System.Text.Json.Serialization.Converters.ObjectDefaultConverter1.OnTryRead(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options, ReadStack& state, T& value) [2023-02-09T10:42:38.592Z] at System.Text.Json.Serialization.JsonConverter1.TryRead(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options, ReadStack& state, T& value)
[2023-02-09T10:42:38.594Z] at System.Text.Json.Serialization.Metadata.JsonPropertyInfo1.ReadJsonAndSetMember(Object obj, ReadStack& state, Utf8JsonReader& reader) [2023-02-09T10:42:38.597Z] at System.Text.Json.Serialization.Converters.ObjectDefaultConverter1.OnTryRead(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options, ReadStack& state, T& value)
[2023-02-09T10:42:38.599Z] at System.Text.Json.Serialization.JsonConverter1.TryRead(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options, ReadStack& state, T& value) [2023-02-09T10:42:38.603Z] at System.Text.Json.Serialization.JsonConverter1.ReadCore(Utf8JsonReader& reader, JsonSerializerOptions options, ReadStack& state)
[2023-02-09T10:42:38.605Z] at System.Text.Json.Serialization.JsonConverter1.ReadCoreAsObject(Utf8JsonReader& reader, JsonSerializerOptions options, ReadStack& state) [2023-02-09T10:42:38.607Z] at System.Text.Json.JsonSerializer.ReadCore[TValue](Utf8JsonReader& reader, JsonTypeInfo jsonTypeInfo, ReadStack& state) [2023-02-09T10:42:38.608Z] at System.Text.Json.JsonSerializer.ContinueDeserialize[TValue](ReadBufferState& bufferState, JsonReaderState& jsonReaderState, ReadStack& readStack, JsonTypeInfo jsonTypeInfo) [2023-02-09T10:42:38.610Z] at System.Text.Json.JsonSerializer.ReadFromStreamAsync[TValue](Stream utf8Json, JsonTypeInfo jsonTypeInfo, CancellationToken cancellationToken) [2023-02-09T10:42:38.613Z] at Microsoft.Azure.Functions.Worker.Converters.JsonPocoConverter.GetConversionResultFromDeserialization(Byte[] bytes, Type type) in D:\a\_work\1\s\src\DotNetWorker.Core\Converters\JsonPocoConverter.cs:line 66 [2023-02-09T10:42:38.615Z] at Microsoft.Azure.Functions.Worker.Context.Features.DefaultModelBindingFeature.BindFunctionInputAsync(FunctionContext context) in D:\a\_work\1\s\src\DotNetWorker.Core\Context\Features\DefaultModelBindingFeature.cs:line 100 [2023-02-09T10:42:38.620Z] at Microsoft.Azure.Functions.Worker.Invocation.DefaultFunctionExecutor.ExecuteAsync(FunctionContext context) in D:\a\_work\1\s\src\DotNetWorker.Core\Invocation\DefaultFunctionExecutor.cs:line 41 [2023-02-09T10:42:38.621Z] at Microsoft.Azure.Functions.Worker.OutputBindings.OutputBindingsMiddleware.Invoke(FunctionContext context, FunctionExecutionDelegate next) in D:\a\_work\1\s\src\DotNetWorker.Core\OutputBindings\OutputBindingsMiddleware.cs:line 13 [2023-02-09T10:42:38.623Z] at Microsoft.Azure.Functions.Worker.Handlers.InvocationHandler.InvokeAsync(InvocationRequest request) in D:\a\_work\1\s\src\DotNetWorker.Grpc\Handlers\InvocationHandler.cs:line 82 Stack: at Microsoft.Azure.Functions.Worker.Context.Features.DefaultModelBindingFeature.BindFunctionInputAsync(FunctionContext context) in D:\a\_work\1\s\src\DotNetWorker.Core\Context\Features\DefaultModelBindingFeature.cs:line 100 [2023-02-09T10:42:38.626Z] at Microsoft.Azure.Functions.Worker.Invocation.DefaultFunctionExecutor.ExecuteAsync(FunctionContext context) in D:\a\_work\1\s\src\DotNetWorker.Core\Invocation\DefaultFunctionExecutor.cs:line 41 [2023-02-09T10:42:38.628Z] at Microsoft.Azure.Functions.Worker.OutputBindings.OutputBindingsMiddleware.Invoke(FunctionContext context, FunctionExecutionDelegate next) in D:\a\_work\1\s\src\DotNetWorker.Core\OutputBindings\OutputBindingsMiddleware.cs:line 13 [2023-02-09T10:42:38.630Z] at Microsoft.Azure.Functions.Worker.Handlers.InvocationHandler.InvokeAsync(InvocationRequest request) in D:\a\_work\1\s\src\DotNetWorker.Grpc\Handlers\InvocationHandler.cs:line 82.
I debuged this and noticed message body looks like:
{ "Offset": 5, "Partition": 0, "Topic": "functions_requests", "Timestamp": "2023-02-09T09:52:50.438Z", "Value": "{}", "Key": "null", "Headers": [] }
Hi @bartoszgrzeda, From the logs, you are overriding confluent library and using version 2.0.2. Currently, Azure Kafka Functions uses confluent kafka dotnet version 1.9.0.
Cannot convert input parameter 'message' to type 'Confluent.Kafka.Message2[[Confluent.Kafka.Ignore, Confluent.Kafka, Version=2.0.2.0, Culture=neutral, PublicKeyToken=12c514ca49093d1e],[Resident.Api.Functions.Contracts.PdfGenerator.GeneratePdfRequest, Resident.Api.Functions.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' from type 'System.String'. Error:System.Text.Json.JsonException: The JSON value could not be converted to Confluent.Kafka.Timestamp. Path: $.Timestamp | LineNumber: 0 | BytePositionInLine: 93.