Chd.Library.Kafka 8.7.0

dotnet add package Chd.Library.Kafka --version 8.7.0
                    
NuGet\Install-Package Chd.Library.Kafka -Version 8.7.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Chd.Library.Kafka" Version="8.7.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Chd.Library.Kafka" Version="8.7.0" />
                    
Directory.Packages.props
<PackageReference Include="Chd.Library.Kafka" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Chd.Library.Kafka --version 8.7.0
                    
#r "nuget: Chd.Library.Kafka, 8.7.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Chd.Library.Kafka@8.7.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Chd.Library.Kafka&version=8.7.0
                    
Install as a Cake Addin
#tool nuget:?package=Chd.Library.Kafka&version=8.7.0
                    
Install as a Cake Tool

Kafka Helper Library for .NET Core

Chd (Cleverly Handle Difficulty) library helps you cleverly handle difficulty, write code quickly, and keep your application stable. NuGet License


📝 Table of Contents


About

Chd.Library.Kafka is a simple yet powerful .NET Core helper library for Apache Kafka.
It abstracts configuration, connection management and (de)serialization, making it easy to produce/consume messages using familiar DI patterns.

Leverages Confluent.Kafka and Newtonsoft.Json.


Features

  • Dependency injection: AddKafkaProducer, AddKafkaConsumer<T>(topic)
  • Interface-based abstraction for message production (IMessageProducer)
  • Automatic JSON (de)serialization for objects
  • Register multiple consumers per topic/service
  • Delivery callback and error extensibility for advanced scenarios
  • Hosted service consumer: background tasks with DI support
  • Configurable via appsettings.json
  • .NET 9.0+ support
  • Easily testable with Swagger, Web API, or console entry points

Installation

dotnet add package Chd.Library.Kafka

Quick Start

1. Configure Kafka in appsettings.json

"Kafka": {
  "Host": "127.0.0.1",
  "Port": "9092"
}

2. Register Producer and (optionally, multiple) Consumers in DI

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddKafkaProducer();
builder.Services.AddKafkaConsumer<EmailMessageConsumer>("topic1");
builder.Services.AddKafkaConsumer<NotificationConsumer>("topic2");

Producing Messages

Define your message contract:

public class EmailMessage
{
    public string Subject { get; set; }
    public string Content { get; set; }
    public string To { get; set; }
}

Inject the MessageProducer and send messages:

using Library.Kafka;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("kafka")]
public class KafkaTestController : ControllerBase
{
    private readonly MessageProducer _messageProducer;
    public KafkaTestController(MessageProducer messageProducer)
    {
        _messageProducer = messageProducer;
    }

    [HttpGet("AddMessagesToKafkaQueue")]
    public string AddMessagesToKafkaQueue()
    {
        _messageProducer.Produce("topic1", new EmailMessage {
            Subject = "Test1 Subject", Content = "Test1 Content", To = "test1@gmail.com"
        });
        System.Threading.Thread.Sleep(3000);
        _messageProducer.Produce("topic2", new EmailMessage {
            Subject = "Test2 Subject", Content = "Test2 Content", To = "test2@gmail.com"
        });
        System.Threading.Thread.Sleep(3000);
        return "Ok";
    }
}
  • Any object will be serialized to JSON automatically.
  • Producer is disposable; managed lifetime by DI.

Consuming Messages

Create a consumer by inheriting ConsumerServiceBase (for raw messages and errors):

using Library.Kafka;
using Confluent.Kafka;

public class EmailMessageConsumer : ConsumerServiceBase
{
    public override void OnMessageDelivered(string message)
    {
        var email = Newtonsoft.Json.JsonConvert.DeserializeObject<EmailMessage>(message);
        // handle email delivery logic here
    }

    public override void OnErrorOccured(Error error)
    {
        // handle/log error as needed
    }
}

Then register and activate each consumer in your DI container:

builder.Services.AddKafkaConsumer<EmailMessageConsumer>("topic1");

Consumers run as background hosted services.


Dependency Injection Patterns

  • Producers: Scoped as Singleton, injectable anywhere (Controller, Service, etc).
  • Consumers: Registered per topic, run as IHostedService background tasks.
  • Extensible error & message handling: Consumers override OnMessageDelivered and OnErrorOccured.

Advanced Usage

Multiple Topics & Consumers

builder.Services.AddKafkaConsumer<Consumer1>("topic1");
builder.Services.AddKafkaConsumer<Consumer2>("topic2");
// as many as needed

Typed Message Consumption

You may also build type-safe consumers by using message base generics:

using Library.Kafka;
using Newtonsoft.Json;

public class StrongTypedConsumer : ConsumerServiceBase
{
    public override void OnMessageDelivered(string message)
    {
        var msgObj = JsonConvert.DeserializeObject<MyCustomMessage>(message);
        // Now process the strongly-typed object...
    }
    public override void OnErrorOccured(Error error)
    {
        // Handle error
    }
}

Error Handling

Override OnErrorOccured for logging, retry, or alerts:

public override void OnErrorOccured(Error error)
{
    Console.WriteLine($"Kafka Error: {error.Reason}");
}

API Reference

Producer

  • void Produce(string topic, object message)
    • Serializes any object as JSON, sends to topic.

Consumer

  • Inherit from ConsumerServiceBase
    • void OnMessageDelivered(string message)
    • void OnErrorOccured(Error error)

Registration

  • services.AddKafkaProducer()
  • services.AddKafkaConsumer<T>(string topic) — registers T as consumer for topic.

Authors

See all contributors on NuGet.


Acknowledgements


For issues, contributions or feedback, see mehmet-yoldas/library-core

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
8.7.0 171 3/5/2026
8.5.6 164 2/19/2026
8.5.5 151 1/20/2026
8.5.4 138 1/15/2026
8.5.3 147 1/12/2026
8.5.2 231 7/31/2025
8.5.1 648 7/23/2025
Loading failed