![]() |
VOOZH | about |
This package has been renamed to MinimalLambda.Envelopes.Kafka. Please migrate to the new package: MinimalLambda.Envelopes.Kafka
dotnet add package AwsLambda.Host.Envelopes.Kafka --version 1.3.1
NuGet\Install-Package AwsLambda.Host.Envelopes.Kafka -Version 1.3.1
<PackageReference Include="AwsLambda.Host.Envelopes.Kafka" Version="1.3.1" />
<PackageVersion Include="AwsLambda.Host.Envelopes.Kafka" Version="1.3.1" />Directory.Packages.props
<PackageReference Include="AwsLambda.Host.Envelopes.Kafka" />Project file
paket add AwsLambda.Host.Envelopes.Kafka --version 1.3.1
#r "nuget: AwsLambda.Host.Envelopes.Kafka, 1.3.1"
#:package AwsLambda.Host.Envelopes.Kafka@1.3.1
#addin nuget:?package=AwsLambda.Host.Envelopes.Kafka&version=1.3.1Install as a Cake Addin
#tool nuget:?package=AwsLambda.Host.Envelopes.Kafka&version=1.3.1Install as a Cake Tool
Strongly-typed Kafka event handling for the AwsLambda.Host framework.
This package provides KafkaEnvelope<T>, which extends the base
KafkaEvent
class with a generic Records collection that deserializes base64-encoded Kafka message values into
strongly-typed objects. Instead of manually decoding and parsing base64 data from record.Value,
you
access deserialized payloads directly via record.ValueContent.
| Envelope Class | Base Class | Use Case |
|---|---|---|
KafkaEnvelope<T> |
KafkaEvent |
Kafka event with deserialized message values |
Define your message type and handler:
using Amazon.Lambda.KafkaEvents;
using AwsLambda.Host.Builder;
using AwsLambda.Host.Envelopes.Kafka;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
var builder = LambdaApplication.CreateBuilder();
var lambda = builder.Build();
// KafkaEnvelope<OrderEvent> provides access to the Kafka event and deserialized OrderEvent payloads
lambda.MapHandler(
([Event] KafkaEnvelope<OrderEvent> envelope, ILogger<Program> logger) =>
{
foreach (var topic in envelope.Records)
{
logger.LogInformation("Processing {Count} records from topic: {Topic}", topic.Value.Count, topic.Key);
foreach (var record in topic.Value)
{
logger.LogInformation(
"Order ID: {OrderId}, Amount: {Amount}",
record.ValueContent?.OrderId,
record.ValueContent?.Amount
);
}
}
}
);
await lambda.RunAsync();
// Your message payload - will be deserialized from base64-encoded Kafka message value
internal record OrderEvent(string OrderId, decimal Amount, DateTime Timestamp);
To implement custom deserialization logic, extend KafkaEnvelopeBase<T> and override the
ExtractPayload method:
// Example: Custom XML deserialization
public sealed class KafkaXmlEnvelope<T> : KafkaEnvelopeBase<T>
{
private static readonly XmlSerializer Serializer = new(typeof(T));
public override void ExtractPayload(EnvelopeOptions options)
{
foreach (var topic in Records)
{
foreach (var record in topic.Value)
{
using var reader = new StreamReader(
record.Value,
Encoding.UTF8,
leaveOpen: true
);
var base64String = reader.ReadToEnd();
var xmlBytes = Convert.FromBase64String(base64String);
using var xmlReader = XmlReader.Create(
new MemoryStream(xmlBytes),
options.XmlReaderSettings
);
record.ValueContent = (T)Serializer.Deserialize(xmlReader)!;
}
}
}
}
This pattern allows you to support multiple serialization formats while maintaining the same envelope interface.
When using .NET Native AOT, register both the envelope and payload types in your
JsonSerializerContext:
[JsonSerializable(typeof(KafkaEnvelope<OrderEvent>))]
[JsonSerializable(typeof(OrderEvent))]
internal partial class SerializerContext : JsonSerializerContext;
Register the serializer and configure envelope options to use the context:
builder.Services.AddLambdaSerializerWithContext<SerializerContext>();
builder.Services.ConfigureEnvelopeOptions(options =>
{
options.JsonOptions.TypeInfoResolver = SerializerContext.Default;
});
The context must be registered as the type resolver for both the envelope options and the Lambda serializer because the Lambda event and envelope payload are deserialized at different steps: the Lambda serializer deserializes the raw event, and the envelope options deserialize the envelope content into your payload type.
Additional packages in the aws-lambda-host framework for abstractions, observability, and event source handling.
This project is licensed under the MIT License. See for details.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 net8.0 is compatible. net8.0-android net8.0-android was computed. net8.0-browser net8.0-browser was computed. net8.0-ios net8.0-ios was computed. net8.0-maccatalyst net8.0-maccatalyst was computed. net8.0-macos net8.0-macos was computed. net8.0-tvos net8.0-tvos was computed. net8.0-windows net8.0-windows was computed. net9.0 net9.0 is compatible. net9.0-android net9.0-android was computed. net9.0-browser net9.0-browser was computed. net9.0-ios net9.0-ios was computed. net9.0-maccatalyst net9.0-maccatalyst was computed. net9.0-macos net9.0-macos was computed. net9.0-tvos net9.0-tvos was computed. net9.0-windows net9.0-windows was computed. net10.0 net10.0 is compatible. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
This package is not used by any NuGet packages.
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|